跟着源码学IM(十二):基于Netty打造一款高性能的IM即时通讯程序即时通讯开发

协议,这玩意儿相信大家肯定不陌生了,简单回顾一下协议的概念:网络协议是指一种通信双方都必须遵守的约定,两个不同的端,按照一定的格式对数据进行“编码”,同时按照相同的规则进行“解码”,从而实现两者之间的数据传输与通信。当自己想要打造一款IM通信程序时,对于消息的封装、拆分也同样需要设计一个协议,通信的两端都必须遵守该协议工作,这也是实现通信程序的前提。但为什么需要通信协议呢?因为TCP/IP中是基于流的方式传输消息,消息与消息之间没有边界,而协议的目的则在于约定消息的样式、边界等。

不知大家是否还记得之前我聊到的RESP客户端协议,这是Redis提供的一种客户端通信协议。如果想要操作Redis,就必须遵守该协议的格式发送数据。这个协议特别简单,如下:

1)首先要求所有命令,都以*开头,后面跟着具体的子命令数量,接着用换行符分割;

3)最后再拼接上具体的子命令,同样用换行符分割。

这样描述有些令人难懂,那就直接看个案例,例如一条简单set命令。如下:

按照Redis的规定,但凡满足RESP协议的客户端,都可以直接连接并操作Redis服务端,这也就意味着咱们可以直接通过Netty来手写一个Redis客户端。代码如下:

//基于Netty、RESP协议实现的Redis客户端publicclassRedisClient{//换行符的ASCII码staticfinalbyte[]LINE={13,10};

publicstaticvoidmain(String[]args){EventLoopGroupworker=newNioEventLoopGroup();Bootstrapclient=newBootstrap();

在上述这个案例中,也仅仅只是通过respCommand()这个方法,对用户输入的指令进行了转换。同时在上面通过Netty,与Redis的地址、端口建立了连接。在连接建立成功后,就会向Redis发送一条转换成RESP指令的set命令。接着等待Redis的响应结果并输出,如下:+OK因为这是一条写指令,所以当Redis收到执行完成后,最终就会返回一个OK,大家也可直接去Redis中查询,也依旧能够查询到刚刚写入的name这个键值。

前面咱们自己针对于Redis的RESP协议,对用户指令进行了封装,然后发往Redis执行。但对于这些常用的协议,Netty早已提供好了现成的处理器,想要使用时无需从头开发,可以直接使用现成的处理器来实现。比如现在咱们可以基于Netty提供的处理器,实现一个简单的HTTP服务器。代码如下:

Netty除开提供了HTTP协议的处理器外,还提供了DNS、HaProxy、MemCache、MQTT、Protobuf、Redis、SCTP、RTSP.....一系列协议的实现,具体定义位于io.netty.handler.codec这个包下,当然,咱们也可以自己实现自定义协议,按照自己的逻辑对数据进行编解码处理。很多基于Netty开发的中间件/组件,其内部基本上都开发了专属的通信协议,以此来作为不同节点间通信的基础,所以解下来咱们基于Netty也来自己设计一款通信协议,这也会作为后续实现聊天程序时的基础。

前面简单聊到过,所谓的自定义协议就是自己规定消息格式,以及自己实现编/解码器对消息实现封装/拆解,所以这里想要自定义一个消息协议,就只需要满足前面两个条件即可。因此实现如下:

上述自定义的协议,也就是一定规则的字节数据,每条消息数据的组成如下:1)魔数:使用第1~5个字节来描述,这个魔数值可以按自己的想法自定义;2)版本号:使用第6个字节来描述,不同数字表示不同版本;3)序列化算法:使用第7个字节来描述,不同数字表示不同序列化方式;4)消息类型:使用第8个字节来描述,不同的消息类型使用不同数字表示;5)消息序号:使用第9~12个字节来描述,其实就是一个四字节的整数;6)正文长度:使用第13~16个字节来描述,也是一个四字节的整数;7)消息正文:长度不固定,根据每次具体发送的数据来决定。

首先来定义两个拉群时用的消息体,如下:

前面单聊有单聊的会话管理机制,而实现多人群聊时,依旧需要有群聊的会话管理机制,首先封装了一个群聊实体类。如下:publicclassGroup{//聊天室名称privateStringname;//聊天室成员privateSetmembers;publicstaticfinalGroupEMPTY_GROUP=newGroup("empty",Collections.emptySet());publicGroup(Stringname,Setmembers){this.name=name;this.members=members;}//省略其他Get/Settings、toString()方法.....}接着定义了一个群聊会话的顶级接口,如下:

前面客户端的功能菜单中,3对应着拉群功能,所以咱们需要对3做具体的功能实现。逻辑如下:>case"3":

这里就不重复赘述了,还是之前的套路,定义一个客户端用的消息体,如下:

依旧先来做客户端的实现,实现了客户端之后再去完成服务端的实现,客户端实现如下:

《跟着源码学IM(一):手把手教你用Netty实现心跳机制、断线重连机制》《跟着源码学IM(二):自已开发IM很难?手把手教你撸一个Andriod版IM》《跟着源码学IM(三):基于Netty,从零开发一个IM服务端》《跟着源码学IM(四):拿起键盘就是干,教你徒手开发一套分布式IM系统》《跟着源码学IM(五):正确理解IM长连接、心跳及重连机制,并动手实现》《跟着源码学IM(六):手把手教你用Go快速搭建高性能、可扩展的IM系统》《跟着源码学IM(七):手把手教你用WebSocket打造Web端IM聊天》《跟着源码学IM(八):万字长文,手把手教你用Netty打造IM聊天》《跟着源码学IM(九):基于Netty实现一套分布式IM系统》《跟着源码学IM(十):基于Netty,搭建高性能IM集群(含技术思路+源码)》《跟着源码学IM(十一):一套基于Netty的分布式高可用IM详细设计与实现(有源码)》《跟着源码学IM(十二):基于Netty打造一款高性能的IM即时通讯程序》(*本文)《SpringBoot集成开源IM框架MobileIMSDK,实现即时通讯IM聊天功能》

THE END
1.即时通讯多人聊天语音现成源码搭建开发(现成案例)而即时通讯中的多人聊天和语音功能更是提升了沟通的效率与趣味性。本文将为您详细介绍如何通过现成源码快速搭建一个功能完善的多人聊天语音系统。 一、项目概述 多人聊天语音系统是一种允许多个用户在同一时间内进行文字、语音和文件交流的技术。通过这种系统,用户可以在一个虚拟的聊天室中进行实时互动,极大地方便了http://m.trustexporter.com/cz13702639.htm
2.亲测8月最新修正版风车IM即时聊天通讯源码+搭建教程文章浏览阅读151次。【亲测】8月最新修正版风车IM即时聊天通讯源码+搭建教程。更多同类源码分享,欢迎关注。https://blog.csdn.net/m0_61505785/article/details/144257345
3.语音社交聊天app开发搭建系统源码语音社交聊天app系统的开发是一个复杂且综合性的项目,它涉及到多个功能模块和技术领域的整合。以下是对语音社交聊天app系统开发的全面解析: 一、功能需求 实时语音传输: 实现用户之间的高质量实时语音通话,包括一对一和多人语音聊天室功能。 支持低延迟、高保真的语音传输,确保用户体验。 https://guangzhou0719902.11467.com/news/9511708.asp
4.直播聊天室ios源码一、iOS 直播聊天室 Demo 说明 1、源码结构 2、AppDelegate 在AppDelegate 中初始化融云。 [[RCDLive sharedRCDLive] initRongCloud:RONGCLOUD_IM_APPKEY]; 3、RCDLive 管理融云核心类,所有与融云交互的接口调用以及消息监听都在这里实现 如果您使用融云 IMkit UI 库,可以设置成 1 ,如果您的 APP 中只使用融云https://www.jianshu.com/p/2ecb5a6a257a
5.APP聊天源码,小程序聊天源码,H5网页聊天室泡泡IM是一套完整的即时通讯软件源码,可用作手机APP聊天源码,微信聊天小程序,H5网页聊天室,社交软件源码,支持语音、视频、文字聊天。泡泡IM聊天源码常用于APP即时通讯,用户间实时沟通、在线客服系统等诸多场景。https://www.popoim.com/
6.ThinkPHP内核PC+H5聊天室即时通讯源码在线聊天交友系统源码所属分类:整站源码-社交/婚庆/摄影 浏览:1451次评论:2次更新时间:2023-11-09钻石素材 立即下载收藏 积分说明:注册即送10牛币,每日签到可获得5牛币,成为VIP会员可永久免牛币下载!充值积分充值会员更多说明? 素材描述:基于thinkPHP5开发的一款H5聊天室源码,支持在线聊天交友的系统源码,使用IM即时通讯,随时随地可https://www.sucainiu.com/10937.html
7.IM即时通讯app源码视频聊天室在线聊天app社交软件仿微信群聊IM即时通讯app源码视频聊天室在线聊天app社交软件仿微信群聊 详情 评价(0) 查看商品详情 查看详情 投诉 本店推荐 进入店铺 一滴教育 进入店铺 卖家QQ 779444424 卖家微信 xielaobanhao 送码网,国内领先的站长交易服务商城;主要从事网站源码交易、视频教程交易、软件交易!担保交易,安全快捷。网络从业者源码交易https://www.songma.com/tp/showpic.php?bh=1604089241-1417
8.飞鸽IMfeigeim源码即时聊天APP软件源码简单好用2024年最新windwos10 22H2安装delphi2007 完整源码及工具 天邑光猫TEWA-1100G自动拨号改桥接模式 华为光猫HS8145C5开启超密破解工具 2024最新仿蓝奏网盘系统源码 即时聊天软件风车IM2022原始泄露原版 飞鸽IMfeigeim源码 即时聊天APP软件源码 简单好用 secret-master不错的web开源聊天室nie 传奇网络游戏支付平台https://1234f.com/sj/GitHub/qtym/20241102/832.html
9.全开源风车im源码(前端uniapp可发布H5及app/后端java含视频搭建通过风车即时通讯IM源码系统,您可以保留与您互动的人员列表。只要该人在线,您就可以与好友列表或联系人列表中的任何人进行即时通讯。您可以在两个屏幕上显示的小窗口中互相输入消息。 风车IM源码提供以下功能: ●即时消息:与在线朋友来回发送笔记 ●聊天:与朋友或同事创建聊天室 https://blog.51cto.com/u_16246039/7345909
10.即时通讯im源码(开源的社区交友聊天系统源码uniapp)详析ChatRoomId:包含所有聊天室id。 用户:所有注册用户的详细信息。 UserChat:所有用户的聊天详情。 让我们从登录页面开始开发 我们将使用 HMS Auth 服务使用电话号码登录。 启用电话号码验证模式,如下图所示。 添加依赖 1 2 3 4 // HMS dependencies implementation "com.huawei.agconnect:agconnect-database:$rootProjechttps://blog.itpub.net/70017920/viewspace-2894979/
11.仿QQ即时通信源码(包括客户端和服务器的IM源码)码农集市专业分享1、支持一对一的聊通信天;2、支持聊天室的多对多聊天通信;3、包括服务器与客户端整套源码。https://www.coder100.com/index/index/content/id/1063190
12.IMChat炫客asp在线无刷新聊天v1.58P2PVideoSQL版源码下载或者多试试几个下载地址 ☉ 如果遇到什么问题,请评论留言,我们定会解决问题,谢谢大家支持! ☉ 本站提供的一些商业软件是供学习研究之用,如用于商业用途,请购买正版。 ☉ 本站提供的IMChat 炫客asp在线无刷新聊天 v1.58 P2PVideo SQL版 资源来源互联网,版权归该下载资源的合法拥有者所有。https://www.jb51.net/codes/36335.html
13.原生仿微信社交社区即时通讯聊天双端APP源码开源带PC客户端+文档考拉开源仿微信uniapp前端+JAVA后端IM即时通讯 立即下载 上传者: weixin_36643308 时间: 2023-08-17 ThinkPHP微的H5聊天室即时通讯系统APP源码.rar ThinkPHP微的H5聊天室即时通讯系统APP源码.rar 立即下载 上传者: q1758204693 时间: 2021-08-12 原生仿微信社交社区即时通讯聊天双端APP源码开源带PC客户https://www.iteye.com/resource/twJoekoe-12740230
14.telegram官网安全、免费、快捷的即时通讯软件 私密的 Telegram消息经过高度加密,可以自毁。 快速地 Telegram比任何其他应用程序都更快地传递消息。 强大的 Telegram对您的媒体和聊天的大小没有限制。 安全的 Telegram可以保护您的信息免受黑客攻击。http://www.91588888.com/
15.求一个IM即时聊天源码吾爱破解web,苹果,安卓)风车IM即时聊天不要网上残缺版本,要可搭建的。类似于QQ微信等不是聊天室那种 https://www.52pojie.cn/thread-1847048-1-1.html
16.2024年对接网易云信/并发高/轻松万人并发/稳定不丢消息/IM即时网易云信 IM 聊天室采用多层架构设计,可以实现真正意义上的大型聊天室,参与人数无上限,又可满足消息到达的实时性要求。 聊天室的权限管理相对简单,默认可以自由进出(可以设置黑名单不允许进入)。 群组(高级群)可以设置丰富的邀请模式、被邀请模式、验证模式,具体内容请点此查看。 https://www.99blog.cn/archives/1294
17.陪玩app源码多人语音聊天室源码语音厅源码基于IM聊天室、多人音视频和直播服务的纯音频社交互动解决方案,支持娱乐聊天室、在线KTV、连麦开黑、多人相亲、歌曲接龙、主播PK、陪伴房等多种社交娱乐玩法http://bugukj.com/accompany.html
18.最新PHP在线客服系统IM即时通讯聊天源码微信公众号小程序H5APPWorkerman是一款开源高性能异步PHP socket即时通讯框架。支持高并发,超高稳定性,被广泛的用于手机app、移动通讯,微信小程序,手游服务端、网络游戏、PHP聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。支持TCP长连接,支持websocket、HTTP等协议,支持自定义协议。拥有异步mysql、异步Redis、异步Http、MQTT物联网https://www.cxyax.com/?post=115
19.价值1w的伊语IM即时通讯纯源码原生APP+JAVA后端+部署文档价值1w的伊语IM即时通讯源码/im商城系统/纯源码IM通讯系统 安卓+IOS前端纯原生源码,后端是java源码。 程序演示图: THE END 通讯聊天 喜欢就点个赞再走呗~ 6赞赏 金币10786 火鸟地方门户v5.8源码-运营版带圈子动态+加即时通讯 金币10609 金币10589 付费资源 https://www.yizhanzzw.com/38928.html
20.聊天室IMVue3:个人博客聊天室IM,挑战最美博客,使用Spring聊天室与朋友圈 后台管理系统 访问统计、基础设置与文件管理 文章管理与新增文章 更新进度 2023年1月1日更新 2023年4月1日更新 2023年7月20日更新 2023年8月20日更新 2023年9月1日更新:安全,安全,安全 2023年10月1日更新 2024年1月10日更新 配置 https://gitee.com/ysgt/poetize-im-vue3