• 需求

用户能即时的收到来自系统或者其他用户发来的消息,在web界面右下角弹窗提醒,用户还能标记消息是否已阅状态。

  • 即时通讯

概念:即时通讯(实时通信,Instant Messaging,简称IM)是一个实时通信系统,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流。

即时通讯有多方面的应用:即时消息、群组聊天、游戏、系统控制、地理定位、中间件和云计算、数据同步、网络语音通话、身份服务。

  • 为什么使用即时通讯

情景:

“我们已经到了吗?”,车后面的小孩儿问道,“没,还没有到”,一个成年人回答到。过了一会儿,小孩儿问道:“我们现在到了吗?”。这种时间短但频率高的重复性交换是一个轮询系统的真实例子:小孩儿不知道汽车什么时候到达目的地,这样他经常向开车的成年人确认。那就是,小孩儿正在轮询信息。通常成年人回复不会花太长时间:“当我们到那儿的时候,我会告诉你”。在这个例子中,这有助于和小孩儿一起旅行的成年人保持头脑清楚;在英特网上,它具有节省带宽和服务器资源的双重目的(不会再有“它变化了吗?”,“没,还没有”的交换),并且确保订阅人接收到更新和网络传递给他们的信息是一样的,而不是只有在下次由订阅人轮询来源。这跟我们平常基于“请求响应”方式来开发网站的理念不同,它属于”发布订阅”的概念,或者说“推送”的概念。

  • XMPP

可扩展通讯与表示协议(XMPP)是一项用于实时通讯的开放技术。它使用可扩展标记

语言(xml)作为交换信息的基本格式。所谓协议,就是实现即时通讯的一组约定。

XMPP可以提供以下核心服务:信道加密、认证、出席、联络清单、一对一消息、多方通讯消息、通知、服务发现、能力广告、结构化数据表单、工作流管理、对等网络媒体会话。

1XMPP 的 client-server 架构

XMPP,在本质上,是一种XML流技术。当你准备开始和XMPP服务器会话,你打开一个长时间在线的TCP连接,然后和服务器协商一个XML流(服务器也同样也打开一个流,例如在每个方向有一个流)。
一旦你和你的服务器建立了一个XML流,你和你的服务器可以通过流交换三个特别的XML片段: < message/>、< presence/>、和< iq/>。这些片段,称为XML节(XML stanzas),是XMPP中有意义的基本单元,而且一旦你已建立一个XML流,你可以通过流发送无限数量的节。

一个节可以被认为是通讯的基本单位,类似于一个数据包或在其他网络协议的消息。

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.cn/>

<item jid="gmz@skh.whu.edu.cn"/>

<item jid="beta@skh.whu.edu.cn"/>

</query>

</iq>

C: <message from="suke@skh.whu.edu.cn"

to="beta@skh.whu.edu.cn">

<body>Off with his head!</body>

</message>

S: <message from="lj@skh.whu.edu.cn"

to="cyl@skh.whu.edu.cn ">

<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

Spark 是一个面向商业的客户端,并和 Openfire 服务器紧密关联。除了和 Openfire 服务器 的 集 成 外 , 它 也 提 供 了 半 专 有 的 音 频 和 视 频 通 讯 能 力 。 许 可 证 : LGPL 。 网 址 :http://www.igniterealtime.org/projects/spark/。

客户端(web):Jabbear、JWChat、SparkWeb等(类似于wechat网页版)。

工具库:

Smack(java)

Smack 是一个非常流行、全功能的库,用于编写客户端、机器人和其他的应用程序。它

由创建了 Openfire 服务器和 Spark 客户端的开发者编写。许可证: Apache。网址:

http://www.igniterealtime .org/projects/smack/。

Strophe(JavaScript)

Strophe 是一个具有良好文档化的库,用于开发 XMPP 客户端,包括强大的 TLS 和 SASL支持。Strophe 有两种形式:C(libstrophe)和 JavaScript(strophejs)。许可证:GPL。网址:http://code.stanziq.com/strophe/。

  • 消息中心实现

数据库设计

活动图

提交信息:标题(内容)、类型、附加属性(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));

登录认证

connection.connect(jid, pwd, function(status));

阅读消息:用户点击消息。

更新消息状态:更新状态位。

其他处理:可选。可根据不同的消息类型,进行不同的处理。如通知服务调用者当前消息已阅读。

消息中心(系统消息)实现相关推荐

  1. bos新建工作流 服务器信息和更新端口,BOS技术支持博客 : BOS_集成消息中心开发指南...

    1. EAS消息中心主动向第三方系统推送消息 使用此功能需要实现一个接口MessageWebServiceDao 接口全路径:com.kingdee.eas.base.message.webservi ...

  2. 聊聊消息中心的设计与实现逻辑

    厌烦被消息打扰,又怕突然间的安静: 一.业务背景 微服务的架构体系中,会存在很多基础服务,提供一些大部分服务都可能需要的能力,比如文件管理.MQ队列.缓存机制.消息中心等等,这些服务需要提供各种可以复 ...

  3. 【消息中心】架构准备

    概述 消息中心是为了将具体业务和消息进行解耦,实现企业微信定制推送.邮件.业务系统消息交互等功能, 可以在分布式环境下提供应用解耦.冗余存储.流量削峰.异步通信.数据同步 背景 调用量大 消息总量大, ...

  4. 基于Redis的消息中心缓存搭建

    背景 问题分析 在以往的经历中出现了在大批用户涌入消息中心时,造成数据库负载急剧升高的问题,经过排查,发现原因主要有以下几点: 消息中心相关表中,部分体量较大的数据表没有创建索引,查询操作中数据库连接 ...

  5. 京麦消息中心业务模型分析(京东)

    京麦消息中心是京麦平台核心业务之一,负责向京麦平台商家用户提供消息推送,ISV消息订阅,以及消息追踪,消息监控,消息统计等功能. 京麦消息中心(以下简称MC)经过4个618的洗礼,技术及业务模型日趋成 ...

  6. 京麦消息中心业务模型分析

    京麦消息中心业务模型分析 京麦消息中心是京麦平台核心业务之一,负责向京麦平台商家用户提供消息推送,ISV消息订阅,以及消息追踪,消息监控,消息统计等功能. 京麦消息中心(以下简称MC)经过4个618的 ...

  7. 骑士卡:基于Kafka搭建消息中心,上亿消息推送轻松完成

    全球购骑士卡是国内领先的会员制特权电商平台,汇聚国内外"吃喝玩乐买"超 300 项会员专属优惠特权.全球购骑士卡基于移动互联生活方式,打通线上.线下消费场景,汇集时下热门.高频的商 ...

  8. 【EventBus】事件通信框架 ( 实现几个关键的封装类 | 消息中心 | 订阅注解 | 订阅方法封装 | 订阅对象-方法封装 | 线程模式 )

    文章目录 一.消息中心 二.订阅方法时的注解 三.订阅方法封装 四.订阅对象-方法封装 五.线程模式 一.消息中心 此处暂时只实现一个单例类 , 后续 注册订阅者 , 处理事件传递 , 取消注册订阅者 ...

  9. java netty聊天室_netty实现消息中心(二)基于netty搭建一个聊天室

    前言 上篇博文(netty实现消息中心(一)思路整理 )大概说了下netty websocket消息中心的设计思路,这篇文章主要说说简化版的netty聊天室代码实现,支持群聊和点对点聊天. 此demo ...

最新文章

  1. 头秃,在线求名字:网易使用昵称交流,再也没有“哥,姐,总”
  2. HTML5如何重塑O2O用户体验
  3. bat批处理延迟运行脚本
  4. 注入dll到一个进程里面
  5. 跨语言调用Hangfire定时作业服务
  6. 安卓软件错误log_关于android程序的log错误信息的问题,请明白人看下吧,我是初学者,新建的android项目,一个代码都没改过...
  7. win10系统用户:如何获得超级管理员权限(vue开发之Win10踩坑)
  8. python字符串类型图解_Python基础——数据类型(图解+实例,非常详细!)
  9. 测试攻城狮必备技能点!一文带你解读DevOps下的测试技术
  10. NavigatorContent使用皮肤
  11. 2020 年度 OSC 中国开源项目评选结果公布
  12. 几何约束栏设置不包括_2011CAD考试样题
  13. java中jdk多大_Java中JDK和JRE的区别
  14. ios 设置导航栏背景色
  15. 写在2016的最后一周
  16. 用VS2010打开VS2013、VS2015、VS2017等高版本项目
  17. app渗透之Burp抓取app数据包
  18. 水清冷冷:Photoshop CC2020/ PSCC2020 安装图文教程及学习
  19. 身为程序员,我敢和你打赌100块,这个数学符号你根本不会认不会写
  20. Happy Children‘s Day

热门文章

  1. 在Edge(Chrome内核)中设置使用Google搜索并设置点击搜索结果默认打开新的标签页
  2. 观展指南|《星火·新生》沉浸式体验展倒计时1天
  3. UI设计图的标注工具大比拼
  4. 数理方程——达朗贝尔公式
  5. [转载]疯狂的程序员(1)
  6. 10万存银行,几年能翻一番?
  7. 雨中拍照:廉价好用的自制伞架
  8. 走马灯如何实现图片自适应
  9. LiveNVR监控摄像头Onvif/RTSP视频流媒体服务平台概览负载信息实时展示取流中、播放中、录像中等使用数目说明
  10. 弱网测试究竟要怎么做,才能防止漏测?