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

來源:互聯網
上載者:User

軟體環境:Goland 

倉庫地址

一、目的

之前用純邏輯壘完了一個可登入登出的線上多人聊天室(代碼倉庫地址),這次學習了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端

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.