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

軟件環境:Goland git

Github地址github

1、目的

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

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

 

2、設計思路

經過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])
		}    

 

3、注意點

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

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

3,設置Map存全部連服務端的客戶端鏈接,併到須要時遍歷輸出和轉發消息至Map中全部的鏈接;設計

 

4、效果

Server端blog

 

Client1端get

 

 

Client2端

 

 

Client3端

 

相關文章
相關標籤/搜索