使用Go语言+Protobuf协议完成一个多人聊天室

软件环境: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端

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏圣杰的专栏

事件总线知多少(2)

源码路径:Github-EventBus 事件总线知多少(1) 事件总线知多少(2) 1.引言 之前的一篇文章事件总线知多少(1),介绍了什么是事件总线...

24070
来自专栏一个爱瞎折腾的程序猿

asp.net core使用Swashbuckle.AspNetCore(swagger)生成接口文档

开局一张图,然后开始编,一些基本的asp.net core东西就不再赘述,本文只对Swashbuckle.AspNetCore的几个使用要点进行描述。

19710
来自专栏偏前端工程师的驿站

.Net魔法堂:log4net详解

一、作用                              提供一个记录日志的框架,可以将日志信息记录到文件、控制台、Windows事件日志和数据库(M...

29790
来自专栏沃趣科技

看各路神仙如何大战MySQL insecure warning报警有感

一、问题由来 mysql在5.6.5上开始在命令行中直接填入用户密码会提示错误,例如: $./mysql -h10.10.30.18 -uwoqutech -p...

47980
来自专栏极客慕白的成长之路

光棍节程序员闯关秀过关攻略

查看源代码,发现a标签的颜色和背景色一样,导致了我们看不到a过关地址,方法很简单,直接复制源代码中的key即可,或者ctrl+a然后单击进入下一关即可

15950
来自专栏前端知识分享

第109天:Ajax请求GET和POST的区别

  用get方式可传送简单数据,但大小一般限制在1KB下,数据追加到url中发送(http的header传送),也就是说,浏览器将各个表单字段元素及其数据按照U...

23820
来自专栏FreeBuf

AutoIt木马又一发:暗藏神秘照片

AutoIt是一个自动化的Windows界面交互的脚本语言,具有很高的灵活性和较低的学习曲线。由于AutoIt解释器本身属于合法程序,黑客可以把恶意代码藏在脚本...

35890
来自专栏菩提树下的杨过

ASP.Net MVC框架配置与分析

前几年的时候ASP.Net就有MVC的概念,实际上就是我们熟悉的WebForm开发模型。 1、Model层与视图无关,并且只与数据库相关: 伪代码: puli...

213100
来自专栏攻城狮的动态

iOS面试题梳理(三)

39570
来自专栏Golang语言社区

package http

要管理代理、TLS配置、keep-alive、压缩和其他设置,创建一个Transport:

24040

扫码关注云+社区

领取腾讯云代金券