使用Go語言+Protobuf協議完成一個多人聊天室


軟件環境:Goland 

Github地址

一、目的

之前用純邏輯壘完了一個可登入登出的在線多人聊天室(代碼倉庫地址),這次學習了Protobuf協議,於是想試着更新下聊天室的版本。

主要目的是為了掌握Protobuf的使用。

 

二、設計思路

通過Protobuf中內置好的編碼函數,將要發送的數據進行編碼,之后在“編碼后的”數據前加入協議號和報頭,再轉碼通過Write與Read函數進行數據的發送和接收。

1,先寫好服務端中的監聽(Listen)端口函數與客戶端上的網絡撥號(Dial)函數;

2,客戶端,對數據進行解碼;

			//客戶端,對接收到的數據進行解碼
			newTest := &protocol.Conn_ToS{}
			err = proto.Unmarshal(msgdata[0:msgdata_read],newTest)
			if err != nil{
				log.Fatal("unmarshaling error:",err)
			}

			fmt.Println(newTest.GetNickname(),newTest.GetMsg())

  

3,服務端,接收消息;

		//服務端,接收到信息並遍歷Map發送消息
                datamsg := make([]byte,255)
		datamsg_read ,err := conn.Read(datamsg)

		if datamsg_read == 0 || err != nil{
			continue
		}
		fmt.Println(datamsg[0:datamsg_read])
		for _,v := range ConnMap{
			v.Write(datamsg[0:datamsg_read])
		}    

 

三、注意點

1,注意字節處的拼接,建議使用append函數

2,處理連接處注意對數據編碼解碼的處理

3,設置Map存所有連服務端的客戶端連接,並到需要時遍歷輸出和轉發消息至Map中所有的連接;

 

四、效果

Server端

 

Client1端

 

 

Client2端

 

 

Client3端

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM