即时通讯IM系统开发,第1张

我于2014年开启即时通讯的开发之路,历经从服务端到客户端,从第三方到自研,经历过诸多的研发难题,都一一破解。现将经验总结如下,希望对行业内从事IM开发的程序员有所帮助。

①P2P方式

P2P方式多用于局域网内聊天,这种方式在有种种限制和不便。一方面它只适合在线的点对点消息传输,对离线,群组等支持不够。另一方面由于 NAT 的存在,使得不同局域网内机器互联难度大大上升,在某些网络类型(对称NAT)下无法建立连接。使用P2P方式的软件在启动后一般做两件事情:

1、进行UDP广播:发送自己信息和接受同局域网内其他端信息。

2、开启TCP监听:等待其他端进行连接。

②服务器中转方式

大部分的互联网IM产品都采用服务器中转这种方式进行消息传输,相对于P2P的方式,具有有以下的优点:

1、支持更多P2P无法支持或支持不好的业务,如离线消息,群组,聊天室。

2、方便业务逻辑的拓展和新旧版本的兼容,当然它也有自己的问题,就是服务器架构复杂,并发要求高。

通过以上的比较,建议我们在开发IM系统的时候使用服务器中转的方式。

IM的网络连接方式有基于TCP的长连接和基于HTTP短连接两种:

①基于TCP的长连接

基于TCP长连接则能够更好地支持大批量用户,问题是客户端和服务器的实现比较复杂。也有一些改进,比如下行使用MQTT进行服务器通知/消息的下发,上行使用HTTP短连接进行指令和消息的上传。这种方式能够保证下行消息/指令的及时性,但是在弱网络下上行慢的问题还是比较严重,早期的来往就是基于这种方式。

②基于HTTP短连接

常见于WEB IM系统(现在很多WEBIM都是基于WebSocket实现),它的优点是实现简单,方便开发上手,问题是流量大,服务器负载较大,消息及时性无法很好地保证,对大规模的用户量支持不够,适合小型的IM系统。

IM常见的协议有:XMPP,MQTT,私有协议。各种协议优缺点情况如下:

①XMPP协议

优点:协议开源,可拓展性强,在各个端(有各种语言的实现,对于前期入门级的开发者是很好的选择,方便进入IM开发的程序员快速上手。

缺点:XML表现力弱,有太多冗余信息,流量大。

常见案例:Gtalk、新浪微博、Facebook。

②MQTT协议

优点:协议简单,流量少。

缺点:不是一个专门为IM设计的协议,多使用于推送。

③私有协议

几乎所有主流的IM APP都是使用私有协议。

优点:高效,节约流量(一般使用二进制协议),安全性高,难以破解。

缺点:开发初期没有现有样列可以参考,对于参与IM开发的程序员的要求比较高。

常见案例:微信、钉钉。

根据以上的对比,我们得出结果,一个好的协议需要满足高效、简洁、节约流量、易于拓展等要求,同时又能够和当前的开发团队的技术堆栈匹配,不能选择一个他们很难上手的。

这里再提一下,我当时开发IM系统的时候,上手用的是XMPP,在使用的过程中发现了很多问题,踩了很多坑。

①实时性原则

消息实时到达接收方,如果用户在线,则消息实时到达,如果用户不在线,则消息在用户登录后到达。由于网络波动,以及移动端操作系统对应用前后台切换的管理,如何实现用户连接管理、消息实时推送,推送失败的处理方式,客户端重连机制,消息如何补齐等,都需要IM系统考虑。由于TCP开发略微复杂,早期的基于HTTP短轮询、长轮询的低效的技术方案,也无法达到实时性的要求。

②可靠性原则

是指我们经常听到的“消息送达”,通常用消息的不丢失和不重复两个技术指标来表示。可靠性是要确保消息被发送后,能够被接收者收到。由于网络环境的复杂性,以及用户在线的不确定性,消息的可靠性(不丢失、不重复)是IM系统的核心指标,也是IM系统实现中的难点之一。总体来说,IM系统的消息“可靠性”,通常就是指聊天消息投递的可靠性(准确的说,这个“消息”是广义的,因为还存用户看不见的各种指令和通知,包括但不限于进群退群通知、好友添加通知等,为了方便描述,统称“消息”)。

从消息发送者和接收者用户行为来讲,消息“可靠性”应该分为以下几种情况:

1、发送失败:对于这种情况要感知到,明确反馈给发送方。如果此消息没有发送成功,发送方可以选择重试或者稍后再试。

2、发送成功:如果接收方处在“在线”状态,应该立即收到此消息。如果接收方处在“离线”状态不能收到消息,一旦上线则立刻收到消息。

3、消息不能重复:简言之就是发送的一条消息不能被重复收到多次。

③一致性原则

系统中要重视消息的时序问题,不能出现发送的消息顺序颠倒的问题。通常出现时序的问题有以下的原因:

1、网络传输延迟导致时序不一致。不同用户发送的消息到达服务器的延时差异较大,给消息时序性带来挑战。早期开发过程中经常会遇到这种问题。

2、分布式系统的出现导致时序不一致。IM系统模块众多,接入层、消息逻辑层等、每层都分布式集群化,这些应用分布在不同的机器上,如何保证时序是个难点。

④扩展性原则

扩展性是IM系统后期要考虑的问题,包括功能的扩展,服务器的扩展等,这次就先不展开阐述。

Mina和Netty都是Java领域高性能和高可伸缩性网络应用程序的网络应用框架。

Mina是 Apache 组织的项目,它为开发高性能和高可用性的网络 应用程序提供的框架。当前的Mina版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序。目前正在使用 Mina的 软件有:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、ObjectRADIUS、Openfire等。

Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、 事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说Netty是一个基于NIO的客户端和服务器端框架,使用Netty可以确保你快速和简单的开发出一个网络应用。

虽然我使用过Mina,但是建议开发选型上使用Netty 。因为Netty有对google protocal buf的支持,有更完整的ioc容器支持(spring,guice,jbossmc和osgi)。Mina更新到20就不再更新了,而Netty一直在更新,目前最新发布的版本已经更新到41,从版本更新角度可以看出Netty的社区很活跃,修复问题一直在持续,这将对我们选择它进行开发带来很多便利。

单体Netty IM系统,可以支持10万并发,如果机器性能良好的情况下可以超过10万。

分布式的Netty IM系统,可以支持更高的并发数。各组件的功能如下:

①IM Server 连接器:主要用来负责维持和客户端的TCP连接。

②缓存:负责用户、用户绑定关系、用户群组关系的缓存。 缓存临时数据、加快读速度。可以做成集群方式。

③数据库:用户、群组、离线消息。可以做成集群方式。

④消息队列:用户状态广播、群组消息广播。可以做成集群方式。

开发环境推荐使用netty-4130这个版本,jdk使用18及以上版本。如下所示:

ionetty

netty-all

4130Final

①开发框架采用Netty + Spring(Spring4x)。

②Spring采用Spring cloud。基于restful 短连接的分布式微服务架构,完成用户在线管理、单点登录系统。

③消息队列采用rocketMQ 高速队列,整流作用。

④数据库采用MYSQL。

⑤协议JSON +自定义数据包采用Fastjson。

基于Netty的IM开源代码在网上有很多,这里就不列举了,可以自行去git上下载。我认为关键是把概念理清楚,技术堆栈选好,总体框架定好,接下来就是开发一个适合中小企业的IM系统了,但是要考虑到后期的扩展性,因为一个好的产品不能自己用,要让更多的人使用。

搭建一套局域网即时通信系统其实并不是一件庞大的工程,一套即时通信的搭建构成可以分为二个部分:即时通信服务器端软件安装和即时通信客户端软件安装。(本文章以清扬即时通信qyMessenger为例进行局域网即时通信系统的搭建说明) 即时通信服务器端硬件:最低配置要求P4以上,512M内存,硬盘在40G以上,操作系统可以是windows xp、windows 2003。

即时通信客户端硬件:操作系统可以是windows 2000、windows xp、windows 2003和 windows vista。

软件要求:

即时通信软件:目前市场上已经有不少企业级局域网即时通信软件了,有LCS、Sametime、清扬即时通信等,建议用户先期试用测试后进行选择(本文章以清扬即时通信qyMessenger为例进行局域网即时通信的搭建说明) 1、下载安装包。最好找到最新版本。建议到官方网站下载。

2、安装。解压缩后,运行setupexe程序,按照安装提示完成安装。如果不解压缩安装会出错。如果安装出现windows install 错误,则需要下载 windows installer 31先行安装后方可。

客户端软件安装

1、获得客户端安装包。这个安装包并不包含在前面下载的安装包中,需要在服务器端管理界面的“生成客户端”菜单中生成(这种生成方式可以在客户端中自动包含服务器端的通信信息,安装后的客户端无需配置将会自动寻找到服务器端来进行通信。),生出来的是4个文件:qyMessengermsi,qyMessengerexe,setupexe和qnmcgi。

2、安装。把生出来的4个文件拷到客户端电脑上,运行setupexe程序,按照安装提示完成安装。

3、运行。运行桌面上的qyMessenger快捷方式。右下角出现QM图标。如果与服务器自动连通,图标是绿色。如果没有与服务器连通,则图标是灰色,这时,需要打开客户端窗口的[配置]/[选项]手工填写服务器端的IP地址信息,修改后,需点击[文件]/[退出]后重新运行起来,看到图标变绿。

企业即时通讯产品作为企业适应数字化时代的必备通讯产品,其“去娱乐化”、“组织机构”、“协同办公”、“安全高效”的四大特性能够提高企业工作效率,改善企业工作流。

随着数字时代的全面到来,国内企业对企业即时通讯产品的认识和重视程度不断提高。

企业用的即时通讯软件主要分为SaaS部署的即时通讯工具和私有化部署的即时通讯工具。前面比如有钉钉、飞书等。这些软件线上开通,服务器存在运营商机房,数据一旦泄露,将造成重大安全事件。危害用户数据安全。2021年以来,大型互联网公司机房数据泄露事件频发,严重危害到企业和个人的信息安全。

与SaaS部署的企业即时通讯软件相比,私有化部署更加符合企业的个性化、安全性需求。市场上认可度最高的企业用即时通讯软件有北信源研发的信源密信,满足企业安全协同办公的需求。

信源密信通过技术手段解决了移动办公信息数据泄漏的问题,该产品私有化部署,支持全面信创环境,跨终端、全方位、安全可信。

信源密信具有哪些特殊功能呢?

1强大的群组功能

信源密信拥有可以容纳 5000 人的超级群;支持普通群、部门群、组织群以及完善的群管理权限控制,可实现群组自动维护;支持一键建群、批量建群、快速建群、面对面建群等;支持群文档,可实现文档共享⌄永久保存、权限管理、在线编辑、快速分享等;支持群便捷功能,可实现群消息置顶、群成员设备查看、群内阅后回执、群公告、短信提醒、 V 标群设,震动强提醒等。

2、 快捷指令消息

信源密信的快捷指令消息让通讯更高效、更及时、更有温度。如抖一抖使用于重要事情,强烈提醒;延时消息适用于定时发送,拒绝打扰;任务消息适用于工作任务,即时安排; V 标好友适用于重要人、群组标记,消息强提示;阅后回执适用于重要消息,及时反馈;组合指令适用于多指令组合,一次发送。

3、 音视频会议

信源密信支持即时会议,一键发起音视频通话、面对面视频会议,方便快捷;支持一键邀请入会奋支持预约会议,提前预约,即时提醒,高效协同;支持多种会议模式及完善的主持人权限控制;支持通过桌面共享、文档上传等进行工作汇报、工作安排;支持远程协助,指导解决紧急问题,让工作更高效。

即安全又高效,这样的产品哪里找?信源密信可以作为首选。感兴趣的可以上信源密信官网了解下。

tg全称(Telegram)是一款跨平台的即时通讯软件,用户可以相互交换加密与自毁消息,发送照片、影片等所有类型文件,Telegram有加密聊天的功能,使用这种功能,聊天双方的内容完全保密,不会担心被监控或被第三方偷窥。

Telegram(非正式简称TG、电报),是一款跨平台的即时通信软件,由帕维尔-杜罗夫、尼古拉-杜罗夫于2013年领导开发,包含iOS版、安卓版、Windows版、macOS版、网页版等。

该软件用户可以相互交换加密与自毁消息,发送照片、影片等所有类型文件。其客户端是自由及开放源代码软件,但服务器端是专有软件。同时官方开放应用程序接口(API),因此拥有许多第三方的客户端可供选择,其中多款内置中文。

2023年4月18日,胡润研究院发布《2023全球独角兽榜》,Telegram排名第8位。

Telegram的功能:

Telegram的群组(电报群)类似于微信群,不同的是电报群没有500人的上限,据说上限是10万人。

另外,电报群分为公开群和私密群两种,私密群类似于微信群,需要有邀请链接才能加入,加入后也不能看到加入前的聊天内容。

Telegram(非正式简称TG)是跨平台的即时通信软件,其客户端是自由及开放源代码软件,但服务器端是专有软件。用户可以相互交换加密与自毁消息(类似于“阅后即焚”),发送照片、影片等所有类型文件。

官方提供手机版(Android、iOS、Windows Phone)、桌面版(Windows、macOS、Linux)和网页版等多种平台客户端;同时官方开放应用程序接口(API),因此拥有许多第三方的客户端可供选择,其中多款内置中文。

-Telegram

1、微信使用的是TCP。微信通讯中使用了HTTP短连接和TCP长连接,并没有用到UDP,其中登陆验证和头像身份信息及日志等功能采用的HTTP,文本消息、语音消息、视频消息、消息这些使用的是TCP长连接。

2、虽然没办法确认,但两种协议肯定都用。早期QQ只用UDP,原因是原来网速极低,TCP协议开销太大,影响速度,后来加入了TCP支持,且可手动选择。目前,通信可靠性及速度均高,所以一般会发UDP为主。

3、QQ采用的通信协议以UDP为主,辅以TCP协议。由于QQ的服务器设计容量是海量级的应用,一台服务器要同时容纳十几万的并发连接,因此服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务。

4、问题有点模糊。传输层应该一般是tcp、对于音视频可以使用UDP。网络层肯定是IP协议。QQ在应用层会使用qq自己的即时通信协议,其它的即时通讯软件一般会使用私有协议;网络接口层会使用EthernetII等。大概就这些了。

5、UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,但是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。QQ采用的通信协议以UDP为主,辅以TCP协议。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 即时通讯IM系统开发

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情