保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

即时通讯IM系统开发

  我于2014年开启即时通讯的开发之路,历经从服务端到客户端,从第三方到自研,经历过诸多的研发难题,都一一破解。现将经验总结如下,希望对行业内从事IM开发的程序员有所帮助。一、基础技术选型(1)通讯方式
  P2P方式
  P2P方式多用于局域网内聊天,这种方式在有种种限制和不便。一方面它只适合在线的点对点消息传输,对离线,群组等支持不够。另一方面由于NAT的存在,使得不同局域网内机器互联难度大大上升,在某些网络类型(对称NAT)下无法建立连接。使用P2P方式的软件在启动后一般做两件事情:
  1、进行UDP广播:发送自己信息和接受同局域网内其他端信息。
  2、开启TCP监听:等待其他端进行连接。
  服务器中转方式
  大部分的互联网IM产品都采用服务器中转这种方式进行消息传输,相对于P2P的方式,具有有以下的优点:
  1、支持更多P2P无法支持或支持不好的业务,如离线消息,群组,聊天室。
  2、方便业务逻辑的拓展和新旧版本的兼容,当然它也有自己的问题,就是服务器架构复杂,并发要求高。
  通过以上的比较,建议我们在开发IM系统的时候使用服务器中转的方式。
  (2)网络连接方式
  IM的网络连接方式有基于TCP的长连接和基于HTTP短连接两种:
  基于TCP的长连接
  基于TCP长连接则能够更好地支持大批量用户,问题是客户端和服务器的实现比较复杂。也有一些改进,比如下行使用MQTT进行服务器通知消息的下发,上行使用HTTP短连接进行指令和消息的上传。这种方式能够保证下行消息指令的及时性,但是在弱网络下上行慢的问题还是比较严重,早期的来往就是基于这种方式。
  基于HTTP短连接
  常见于WEBIM系统(现在很多WEBIM都是基于WebSocket实现),它的优点是实现简单,方便开发上手,问题是流量大,服务器负载较大,消息及时性无法很好地保证,对大规模的用户量支持不够,适合小型的IM系统。(3)通讯协议方式
  IM常见的协议有:XMPP,MQTT,私有协议。各种协议优缺点情况如下:
  XMPP协议
  优点:协议开源,可拓展性强,在各个端(有各种语言的实现,对于前期入门级的开发者是很好的选择,方便进入IM开发的程序员快速上手。
  缺点:XML表现力弱,有太多冗余信息,流量大。
  常见案例:Gtalk、新浪微博、Facebook。
  MQTT协议
  优点:协议简单,流量少。
  缺点:不是一个专门为IM设计的协议,多使用于推送。
  私有协议
  几乎所有主流的IMAPP都是使用私有协议。
  优点:高效,节约流量(一般使用二进制协议),安全性高,难以破解。
  缺点:开发初期没有现有样列可以参考,对于参与IM开发的程序员的要求比较高。
  常见案例:微信、钉钉。
  根据以上的对比,我们得出结果,一个好的协议需要满足高效、简洁、节约流量、易于拓展等要求,同时又能够和当前的开发团队的技术堆栈匹配,不能选择一个他们很难上手的。
  这里再提一下,我当时开发IM系统的时候,上手用的是XMPP,在使用的过程中发现了很多问题,踩了很多坑。二、IM系统设计(1)系统设计原则
  实时性原则
  消息实时到达接收方,如果用户在线,则消息实时到达,如果用户不在线,则消息在用户登录后到达。由于网络波动,以及移动端操作系统对应用前后台切换的管理,如何实现用户连接管理、消息实时推送,推送失败的处理方式,客户端重连机制,消息如何补齐等,都需要IM系统考虑。由于TCP开发略微复杂,早期的基于HTTP短轮询、长轮询的低效的技术方案,也无法达到实时性的要求。
  可靠性原则
  是指我们经常听到的消息送达,通常用消息的不丢失和不重复两个技术指标来表示。可靠性是要确保消息被发送后,能够被接收者收到。由于网络环境的复杂性,以及用户在线的不确定性,消息的可靠性(不丢失、不重复)是IM系统的核心指标,也是IM系统实现中的难点之一。总体来说,IM系统的消息可靠性,通常就是指聊天消息投递的可靠性(准确的说,这个消息是广义的,因为还存用户看不见的各种指令和通知,包括但不限于进群退群通知、好友添加通知等,为了方便描述,统称消息)。
  从消息发送者和接收者用户行为来讲,消息可靠性应该分为以下几种情况:
  1、发送失败:对于这种情况要感知到,明确反馈给发送方。如果此消息没有发送成功,发送方可以选择重试或者稍后再试。
  2、发送成功:如果接收方处在在线状态,应该立即收到此消息。如果接收方处在离线状态不能收到消息,一旦上线则立刻收到消息。
  3、消息不能重复:简言之就是发送的一条消息不能被重复收到多次。
  一致性原则
  系统中要重视消息的时序问题,不能出现发送的消息顺序颠倒的问题。通常出现时序的问题有以下的原因:
  1、网络传输延迟导致时序不一致。不同用户发送的消息到达服务器的延时差异较大,给消息时序性带来挑战。早期开发过程中经常会遇到这种问题。
  2、分布式系统的出现导致时序不一致。IM系统模块众多,接入层、消息逻辑层等、每层都分布式集群化,这些应用分布在不同的机器上,如何保证时序是个难点。
  扩展性原则
  扩展性是IM系统后期要考虑的问题,包括功能的扩展,服务器的扩展等,这次就先不展开阐述。(2)网络应用框架选型
  Mina和Netty都是Java领域高性能和高可伸缩性网络应用程序的网络应用框架。
  Mina是Apache组织的项目,它为开发高性能和高可用性的网络应用程序提供的框架。当前的Mina版本支持基于JavaNIO技术的TCPUDP应用程序开发、串口通讯程序。目前正在使用Mina的软件有:ApacheDirectoryProject、AsyncWeb、AMQP(AdvancedMessageQueuingProtocol)、RED5Server(MacromediaFlashMediaRTMP)、ObjectRADIUS、Openfire等。
  Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说Netty是一个基于NIO的客户端和服务器端框架,使用Netty可以确保你快速和简单的开发出一个网络应用。
  虽然我使用过Mina,但是建议开发选型上使用Netty。因为Netty有对googleprotocalbuf的支持,有更完整的ioc容器支持(spring,guice,jbossmc和osgi)。Mina更新到2。0就不再更新了,而Netty一直在更新,目前最新发布的版本已经更新到4。1,从版本更新角度可以看出Netty的社区很活跃,修复问题一直在持续,这将对我们选择它进行开发带来很多便利。三、基于Netty架构设计(1)单体系统架构
  单体NettyIM系统,可以支持10万并发,如果机器性能良好的情况下可以超过10万。(2)分布式架构
  分布式的NettyIM系统,可以支持更高的并发数。各组件的功能如下:
  IMServer连接器:主要用来负责维持和客户端的TCP连接。
  缓存:负责用户、用户绑定关系、用户群组关系的缓存。缓存临时数据、加快读速度。可以做成集群方式。
  数据库:用户、群组、离线消息。可以做成集群方式。
  消息队列:用户状态广播、群组消息广播。可以做成集群方式。四、如何快速入手(1)开发环境
  开发环境推荐使用netty4。1。30这个版本,jdk使用1。8及以上版本。如下所示:
  io。netty
  nettyallartifactId
  4。1。30。Final
  dependency(2)组件选择
  开发框架采用NettySpring(Spring4。x)。
  Spring采用Springcloud。基于restful短连接的分布式微服务架构,完成用户在线管理、单点登录系统。
  消息队列采用rocketMQ高速队列,整流作用。
  数据库采用MYSQL。
  协议JSON自定义数据包采用Fastjson。(3)参考样例
  基于Netty的IM开源代码在网上有很多,这里就不列举了,可以自行去git上下载。我认为关键是把概念理清楚,技术堆栈选好,总体框架定好,接下来就是开发一个适合中小企业的IM系统了,但是要考虑到后期的扩展性,因为一个好的产品不能自己用,要让更多的人使用。

要勤于思考(三)很多人认为按照某一道路,某一格式行走,便可以到达彼岸,但是,有时我们并不能理解这固定的套路,最终落得失败。人生总是充满着未知的事情,没有谁会知道未来的变数,但追求真善美,反对假……中国黑客袭击印度电力设施?我外交部正面回应中国青年报客户端北京4月7日电(中青报中青网记者马子倩)据印度《经济时报》4月7日报道,一家名为RecordedFuture的美国网络安全机构发布报告称,近几个月来,疑似得到中……中国,是AI大国还是AI强国?近日,斯坦福大学发布了《2022年AI指数报告》。这份长达190多页的报告涵盖研发、经济、教育等各个方面的AI发展成果。根据这份报告,2021年,中国AI专利申请量占全球……描写父爱的700字作文父爱如山描写父爱的700字作文:父爱如山一天早上,天上下着倾盆大雨,我就望着窗外沉思着怎么去学校,爸爸似乎看出了我的心思,就说:ldquo;下这么大的雨,我送你去吧。rdquo;……云快充联合中国平安,破解电桩投建资金难题近日,国内领先的充电物联网和能源管理服务商江苏云快充新能源科技有限公司(简称:云快充)与平安国际融资租赁有限公司(简称:平安租赁)达成合作。双方将基于充电桩投资运营和充电桩融资……21世纪的生活英语作文TheAdvantagesandDisadvantagesofLivinginthe21stcentury生活在21世纪的优缺点Livinginthe21stcentur……云计算陷入内卷?独立云厂商青云科技主动求变本报记者李乔宇目前,有不少声音对中国云计算行业提出质疑:增速放缓,过度内卷,导致各家陷入价格竞争的泥潭。事实上,这样的说法并不准确和全面。从各家厂商近期公布的业绩来……在山的那边四年级作文650字在山的那边是什么呢,在家门口,一望就看见在家对面的上,以及在山前的小村庄,于是总向往这我能到对面的村里,去对面的山上,山的那边是什么,小狐狸总是这么想。小狐狸是个姑娘,长……悦读书定位移动医疗的下一个风口!告别被动医疗,推动健康中国读书是世界上成本最低的一种投资方式,哪怕只是每天坚持阅读几页,长期下来也会得到不小的收获与回报。从这个角度来看,读书与基金投资有着异曲同工之妙,都是相信长期的力量。基于此,金融……珍惜水资源人人做起作文无论是在学校还是在社会中,大家对作文都再熟悉不过了吧,作文根据写作时限的不同可以分为限时作文和非限时作文。写起作文来就毫无头绪?下面是小编帮大家整理的珍惜水资源人人做起作文,希……义卖感受一年级叙事作文陈昊天上午十点,我和妈妈、外婆准时到学校集合。陆老师已经在点名并且分发红马甲了。接着,陆老师给我们交代了卖报的注意事项。随后,我们开心地拍了集体照,老师给每人分发了二十份报纸。……20年后的美丽学校五年级作文我的想象仿佛乘坐着宇宙飞船,一下子飞到了我们的未来学校。这时我沉浸在美好的幻象之中校门口,有两个高智能机器人,站在门口每天欢迎我们来到学校。我们还可以和机器人交谈,我们提……
六年级作文节约用水让我们行动起来3月22日是世界水日。每年的这一天,世界各国都会宣传:大家要爱惜水资源,保护生命之水。其实,不光在这一生命中的每一天,都应该珍惜每一滴水,用实际行动珍爱生命之水。生物需要水、生……你是我的朋友作文优秀篇导语:大自然,你是我的朋友,你告诉了我何为安然自若,让我远离浮躁,保持一颗宁静沉稳的心。下面是小编整理的一些关于朋友的作文,欢迎查阅与借鉴,谢谢。你是我的朋友作文(一)一……关于315消费者权益日的日记350字告诉大家一个小消息,今天是三月十五日。三月十五日,什么节日哦?呵呵,不知道了吧,今天可是大名鼎鼎的打假日!打假日?什么大假日?让我来告诉你吧,打假日就是……自尊名言最要紧的是自尊名言自尊,迄今为止一直是少数人所必备的一种德性。凡是在权力不平等的地方,它都不可能在服从于其他人统治的那些人的身上找到。罗素自尊心是一种类似灵魂发炎的病痛。谁一得上这种病,谁……记楠溪江的山水作文500字人们从楠溪江回来,都不禁赞叹:ldquo;楠溪江的山水真美,如神来之笔啊!rdquo;我怀着好奇心来到楠溪江。登上山顶,楠溪江的风景尽收眼底。往下看,发现山离地面有上百米……家乡的春节中学作文800字在腊月里,我们家乡还并不开始热闹起来,因为不到小年,好有许多的人打工还没回来。不过离小年的距离天数还有一天的话,他们不管多忙,都会赶回来过小年。照家乡的。老习惯,春节是从……iOS15。4测试版又曝猛料发现苹果ARVR的开发者API在苹果最新的iOS15。4测试版中,已经发现了苹果AR和VR的内部代码,包括开发者API,以及网络应用向iOS用户发送推送通知的功能。第一款苹果AR头戴可能会在2022年……50句小学生拟人句26、一个个红石榴就像一个个小姑娘可爱的笑脸,躲在树枝间。27、天是个害羞的小姑娘,遮遮掩掩,躲躲藏藏。28、顽皮的雨滴最爱在雨伞上尽情地跳舞。29、微风柔和……麻辣火锅六年级作文也许你看到这个标题,会自豪地说:我也吃过!但那并不正宗。今年暑假,我有幸品尝到了地道的麻辣火锅。看那正方形的金属锅中,红得发黑的汤水沸腾着,翻滚之前,透露着巴蜀人民的豪情……接力比赛300字小学作文篇一:接力比赛竞赛接力棒的时分我的心境有点严重,又有点惧怕体现欠好或掉棒会被骂。有一次练习赛的时分,六班的小朋友跑不到一半就掉棒了,其时我看了很想笑,由于这样我就有……小学生的作文樱花5篇小学生的作文樱花1在我家小区的大门口旁边,有几棵樱花树,这几天开得正旺盛,从远处看层层叠叠,整个树冠都是粉红色的。一堆堆,一层层,好像粉色的云海,在朝阳下,绯红万倾,流光……有没有既支持DDR3又支持固态NVME协议的主板?华南金牌x99主板ddr3ddr4同时支持也支持nvme网上多的是技嘉G1。SniperB6,B85的芯片,原生支持安装M。2,就是NVME固态硬盘。nvme……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网