消息中⼼(系统消息)实现
需求
⽤户能即时的收到来⾃系统或者其他⽤户发来的消息,在web界⾯右下⾓弹窗提醒,⽤户还能标记消息是否已阅状态。
世界三大美食即时通讯
概念:即时通讯(实时通信,Instant Messaging,简称IM)是⼀个实时通信系统,允许两⼈或多⼈使⽤⽹络实时的传递⽂字消息、⽂件、语⾳与视频交流。
即时通讯有多⽅⾯的应⽤:即时消息、组聊天、游戏、系统控制、地理定位、中间件和云计算、数据同步、⽹络语⾳通话、⾝份服务。
为什么使⽤即时通讯
情景:
自定义qq头像“我们已经到了吗?”,车后⾯的⼩孩⼉问道,“没,还没有到”,⼀个成年⼈回答到。过了⼀会⼉,⼩孩⼉问道:“
我们现在到了吗?”。这种时间短但频率⾼的重复性交换是⼀个轮询系统的真实例⼦:⼩孩⼉不知道汽车什么时候到达⽬的地,这样他经常向开车的成年⼈确认。那就是,⼩孩⼉正在轮询信息。通常成年⼈回复不会花太长时间:“当我们到那⼉的时候,我会告诉你”。在这个例⼦中,这有助于和⼩孩⼉⼀起旅⾏的成年⼈保持头脑清楚;在英特⽹上,它具有节省带宽和服务器资源的双重⽬的(不会再有“它变化了吗?”,“没,还没有”的交换),并且确保订阅⼈接收到更新和⽹络传递给他们的信息是⼀样的,⽽不是只有在下次由订阅⼈轮询来源。这跟我们平常基于“请求响应”⽅式来开发⽹站的理念不同,它属于”发布订阅”的概念,或者说“推送”的概念。
XMPP
可扩展通讯与表⽰协议(XMPP)是⼀项⽤于实时通讯的开放技术。它使⽤可扩展标记
语⾔(xml)作为交换信息的基本格式。所谓协议,就是实现即时通讯的⼀组约定。
XMPP可以提供以下核⼼服务:信道加密、认证、出席、联络清单、⼀对⼀消息、多⽅通讯消息、通知、服务发现、能⼒⼴告、结构化数据表单、⼯作流管理、对等⽹络媒体会话。
图 1XMPP 的 client-server 架构
XMPP,在本质上,是⼀种 XML 流技术。当你准备开始和 XMPP 服务器会话,你打开⼀
个长时间在线的 TCP 连接,然后和服务器协商⼀个 XML 流(服务器也同样也打开⼀个流,
例如在每个⽅向有⼀个流)。是免费的、开源的、基于可拓展通讯和表⽰协议(XMPP)、采⽤Java编程语⾔开发的实时协作服务器。Openfire安装和使⽤都⾮常简单,并利⽤Web进⾏管理。单台服务器可⽀持上万并发⽤户。
XML 流 例⼦:
C: <stream:stream>
C: <presence/>
C: <iq type="get">
<query xmlns="jabber:iq:roster"/>
黑暗模式怎么设置</iq>
家庭用指纹锁哪种好S: <iq type="result">
<query xmlns="jabber:iq:roster">
<item jid="suke@skh.whu.edu/>
<item jid="gmz@skh.whu.edu"/>
<item jid="beta@skh.whu.edu"/>
</query>
</iq>
C: <message from="suke@skh.whu.edu"
to="beta@skh.whu.edu">
<body>Off with his head!</body>
</message>
S: <message from="lj@skh.whu.edu"
to="cyl@skh.whu.edu ">
<body>You are all pardoned.</body></message>
C: <presence type="unavailable"/>
C: </stream:stream>
XMPP的实现
服务端:djabberd、ejabberd、jabberd、jabberd2、Prosody、Tigase等。
openfire
是免费的、开源的、基于可拓展通讯和表⽰协议(XMPP)、采⽤Java编程语⾔开发的实时协作服务器。 Openfire安装和使⽤都⾮常简单,并利⽤Web进⾏管理。单台服务器可⽀持上万并发⽤户。
客户端(桌⾯版):Coccinella、Jeti、Psi、Swift、Tkabber等(类似于rtx、qq、tim、)。
Spark
客户端(web):Jabbear、JWChat、SparkWeb等(类似于wechat⽹页版)。
⼯具库:
Smack(java)
Smack 是⼀个⾮常流⾏、全功能的库,⽤于编写客户端、机器⼈和其他的应⽤程序。它
由创建了 Openfire 服务器和 Spark 客户端的开发者编写。许可证: Apache。⽹址:
Strophe(JavaScript)
消息中⼼实现
数据库设计
益阳市中考成绩查询
活动图
提交信息:标题(内容)、类型、附加属性(url、数据)、业务标识、发送⽅信息、接受⽅信息等。卫生间装修费用预算
发送⽅信息、接受⽅信息包含⽤户名、系统标识。
中间件:可选。⽐如可以是spring cloud的Feign、spring cloud stream、rabbitmq。考虑到消息的⾼并发性,推荐使⽤消息中间件spring cloud stream、rabbitmq。
信息处理:对提交的信息进⾏验证、存储等。
发送消息:使⽤smack api与openfire交互,将消息发送给相应的客户端。实现已封装在simba-component-xmpp包中。
消息中⼼发送逻辑关键代码:
⾃定义拓展节点MessageXMPP
<messageCenter> --消息中⼼
<infoId>5376228f-abca-4353-ae00-e4042f96903a</infoId> --消息
主体id
<type>1</type> --消息类型
<url>/</url> --附加属性
<appSn>xfgl</appSn> --消息来源应⽤标识
</messageCenter>
simba-component-xmpp关键代码:
创建链接
发送消息
消息提醒:消息接收者的web界⾯右下⾓出现窗⼝提醒消息。
Strophe.js关键代码:
添加消息监听处理器
connection.addHandler(function(message));
登录认证
阅读消息:⽤户点击消息。
更新消息状态:更新状态位。
其他处理:可选。可根据不同的消息类型,进⾏不同的处理。如通知服务调⽤者当前消息已阅读。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论