使用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端
使用Go语言+Protobuf协议完成一个多人聊天室相关推荐
- 基于TCP协议的mfc多人聊天室
基于TCP协议的MFC多人聊天室 简易的mfc聊天室思路实现 前言 一.socket通信 二.效果展示 三.代码实现 1.ClientSocket.cpp 客户端套接字 2.ServerSocket. ...
- Android Socket通信(五) -- 实现一个多人聊天室
系列文章: Android Socket 系列更新计划 Android Socket通信(一) – 初识与相遇 Android Socket通信(二) --UDP,单播,广播和多播(组播) Andro ...
- 9. nio实现一个多人聊天室
文章目录 NIO实现一个多人聊天室 1.服务端 2.客户端 3.客户端处理器 4.多客户端启动 NIO实现一个多人聊天室 1.服务端 package ys.server;import org.slf4 ...
- 10分钟教对象搭建了一个多人聊天室~
Demo演示 体验demo链接: http://socket.vjscoder.com/websocket-chatroom/index.html#/ 去github查看完整源码: https://g ...
- socket多人聊天室c语言,一分钟实现网页多人聊天室【Socket.IO】
socket.io是个基于node.js的快平台实时通讯框架.只用不到10行代码,就可以搭建一个简单的多人实时聊天室. 先来看看运行后的效果: socket.io多人聊天室 只要简单几步,就可以实现. ...
- nodejs初探(四)实现一个多人聊天室
样例地址http://www.lxrtalk.com/ 我们实现的思路是,当有一个人发送过来消息,我们就广播给其他客户端. var net = require('net'); var chatServ ...
- 基于 Vue 开发一个 多人聊天室(万字长文) - 从 0 到 1 篇
前言 在上个月初,接到一个需求,要开发一个 聊天通讯 模块 并且 集成到 项目中的多个 入口,实现业务数据的记录追踪. 接到需求后,还挺开心,这是我第一次 搞 通讯 类的需求,之前一直是 B 端 的业 ...
- 利用TCP/UDP 协议制作一个飞秋聊天工具
视频操作演示: 利用TCP/UDP 协议制作一个飞秋聊天工具演示视频 int udp_broadcast(char const*argv[]) {//1.创建对象udp_socket = socket ...
- Netty - 一个简单的聊天室小项目
经过一段时间对Netty的学习,我们对Netty各版本以及像ProtocolBuffers等技术应用都有了不少相关的了解, 我们就用这段时间学到的只是做一个简单的聊天室的小项目来练习自己学到的技术. ...
最新文章
- 【Effective Java】最佳实践 其他合集
- Log4j配置文件位置+Spring数据源配置文件位置
- 奇妙的曲线--希尔伯特曲线
- 易语言注入 c dll,易语言DLL注入模块简单型
- 中断处理函数_ARM的中断处理 [二]
- 建设银行IT审计体系概况及实施策略
- H5页面适配 iPhoneX
- SpringBoot基础教程1-1-2 配置文件介绍
- 【雷达通信】基于matlab SVM识别雷达数据【含Matlab源码 305期】
- 3-QT程序运行时报错E:\SogouInput\6.7.0.0329\程序异常终止,该怎么解决?
- BZOJ 4565 字符合并 (区间 DP 状压 DP)
- app上架因为副标题被App Store残忍拒绝!
- 基于MATLAB的运动模糊图像恢复技术
- Unity快速入门之四 - Unity模型动画相关
- redit mysql_【Voten】基于Laravel实现的类似Reddit的实时社交论坛系统
- 子线程何时开启、何时结束
- ur机械臂 控制器_UR机器人远程控制研究
- 基于C语言的简单小游戏-(扫雷)
- 精简指令集的特点_精简指令集有哪些指令
- 接触角测量的常用测量法
热门文章
- Tensorflow保存模型详解(进阶版二):如何保存最近的.ckpt文件 及 如何分开保存.ckpt数据文件和.meta图文件
- CentOS下二进制包/源码安装方式的MySQL卸载步骤
- python博弈论代码_使用 40 多行的 Python 代码实现一个简单的演化过程
- java中类型的相互转化_Java中的数据类型及相互转换方法
- 基于weblogic 的EJB 学习笔记-JSP教程,资料/其它
- 搭建Apache Mina框架并实现Server与Client端的简单消息传递
- 用 Linux 和 Apache Hadoop 进行云计算
- Netty 简单样例分析(io传输的框架)
- centos7编译安装php7.3
- spring boot+mybatis整合