当前位置:首页 > 服务端 > 基于Netty的聊天系统(一)通讯原理篇

基于Netty的聊天系统(一)通讯原理篇

2022年11月06日 17:23:08服务端29

今天周六,正好顺便把聊天系统的通讯原理写一下,本来是用XMPP+Openfire做了一个聊天,但是在做群聊那块需要去写插件来主动向表里变去写数据,因为openfire外国人写的,最初设计的群聊是会议室那种形式,和我们现在这种QQ群聊还是有差别的,改造起来比较麻烦,需要去通都源码等等,openfire是基于mina来写的,mina和netty又出自同一作者之手,那么我们就基于netty来写一个吧,首先我们来谈一谈通讯的原理

1:通讯原理

  首先比方说A和B两个人要进行聊天(这里我们先讨论一对一这种聊天),那么从登录开始谈起,既然有聊天功能所以,肯定要有一个通讯服务器,这个服务器只负责聊天,那么例如查看别人信息了等等这些操作,我们暂且称之为API服务器,只有聊天是通过scoket访问通讯服务器的,我们在登录的时候分为两个阶段,第一个是连接阶段,第二个是验证阶段,当登录成功之后,然后A开始给B发消息,当服务器收到消息之后,找到对应的Handler然后来处理消息,其实在这里我们可以直接解析消息发送给B,这样是可以的,但是当消息发送多的时候可能会发生消息丢失,所以我们在这里不采取这种方式,我们首先把消息存到数据库里边去,数据库这里我们采用Redis数据库,基于内存的,然后消息存到数据库之后,然后我们去看一下B的状态,如果B在线就去发送一个通知给B,告诉B有消息了,B接收到消息之后,然后发送一个请求到服务器要求获取消息,服务器接收到之后然后找对应的Handler来进行数据库查询,然后把查询到的消息给B,然后B把收到消息的最大索引号发送会服务器端,然后服务器端根据最大消息的索引号来删除对应数据库里边的消息,一般聊天消息国家都会要求做存储,方便监察,所以一般还会把全部聊天消息持久化起来,至此,一个简单的发送-接受消息流程结束了。下边我花了一个简单的图,文字比较多,图好理解一些

基于Netty的聊天系统(一)通讯原理篇 _ JavaClub全栈架构师技术笔记

至于Redis数据库大家可以先熟悉一下,尤其是Redis的数据结构,在这里我们存储单人聊天信息的时候采用的zset结构。下一篇,我们将会谈论一下通讯协议的制定,欢迎大家持续关注。

作者:Mr.Venny
来源链接:https://www.cnblogs.com/venny/p/3788133.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68162.html

标签: Netty
分享给朋友: