使用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等技术应用都有了不少相关的了解, 我们就用这段时间学到的只是做一个简单的聊天室的小项目来练习自己学到的技术. ...
最新文章
- 英特尔成立物联网视频事业部,这届IESS还揭露了哪些信息?
- celery源码分析-wroker初始化分析(上)
- C++ 虚函数在基类与派生类对象间的表现及其分析
- 在项目中增加自定义icon图标
- 计算机性能在线测评,关于电脑性能测试的常见的几大方法
- vim比vi做的一些改进
- C# == 和equals()区别
- 如何使用用户数据脚本在EC2实例上安装Apache Web Server
- 解决: Caused by: java.lang.IllegalStateException: Cannot load driver class: com.mysql.jdbc.Driver
- 【转】memcache-client-forjava
- LVS详解(二)——LVS工作模式
- 关于网上商城开发的随笔记录2
- CleanMyMac下载正版清理苹果mac系统电脑蓝奏云
- Project Aposs
- C# 设定TextBox 只能输入正数/负数/小数 By KEYPRESS 事件
- SPSS实现游程检验
- 应急指挥调度中心坐席解决方案
- .NET Standard(1)——.NET Standard是什么
- 控制面板打开后立即自动关闭
- 数据挖掘十大算法(九):朴素贝叶斯原理、实例与Python实现
热门文章
- 英文单词 hard
- mysql done_MySQL 获取游标结果报错:1193-Unknown system variable ‘done’
- 源码注释TODO/ FIXME/XXX,
- [攻防世界 pwn]——level3
- php7的稳定性,探索PHP7(一)--性能
- java 2wei shuzu_JavaScript 2维数组(JavaScript 2 dimension array)
- 控制台打印列未定义错误
- spring 事务-使用@Transactional 注解(事务隔离级别)
- C# 引用类型的对象克隆(深拷贝)。
- kuangbin带我飞QAQ DLX之一脸懵逼