軟件環境:Goland git
Github地址github
以前用純邏輯壘完了一個可登入登出的在線多人聊天室(代碼倉庫地址),此次學習了Protobuf協議,因而想試着更新下聊天室的版本。網絡
主要目的是爲了掌握Protobuf的使用。app
經過Protobuf中內置好的編碼函數,將要發送的數據進行編碼,以後在「編碼後的」數據前加入協議號和報頭,再轉碼經過Write與Read函數進行數據的發送和接收。函數
//客戶端,對接收到的數據進行解碼 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())
//服務端,接收到信息並遍歷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端blog
Client1端get
Client2端
Client3端