欧易

欧易(OKX)

国内用户最喜爱的合约交易所

火币

火币(HTX )

全球知名的比特币交易所

币安

币安(Binance)

全球用户最多的交易所

即时通讯IM系统开发

时间:2022-08-27 22:37:34 | 浏览:821

我于2014年开启即时通讯的开发之路,历经从服务端到客户端,从第三方到自研,经历过诸多的研发难题,都一一破解。现将经验总结如下,希望对行业内从事IM开发的程序员有所帮助。一、基础技术选型(1)通讯方式①P2P方式P2P方式多用于局域网内聊天

我于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短连接

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

(3)通讯协议方式

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

①XMPP协议

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

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

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

②MQTT协议

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

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

③私有协议

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

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

缺点:开发初期没有现有样列可以参考,对于参与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版本支持基于 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更新到2.0就不再更新了,而Netty一直在更新,目前最新发布的版本已经更新到4.1,从版本更新角度可以看出Netty的社区很活跃,修复问题一直在持续,这将对我们选择它进行开发带来很多便利。

三、基于Netty架构设计

(1)单体系统架构

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

(2)分布式架构

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

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

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

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

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

四、如何快速入手

(1)开发环境

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

<dependency>

<groupId>io.netty</groupId>

<artifactId>netty-all<rtifactId>

<version>4.1.30.Final</version>

</dependency>

(2)组件选择

①开发框架采用Netty + Spring(Spring4.x)。

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

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

④数据库采用MYSQL。

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

(3)参考样例

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

相关资讯

数字藏品系统开发怎么制作?NFT数字藏品系统开发说明功能

一、什么是数字藏品什么是所谓的数字藏品,其实就是指使用区块链技术,将一些作品、艺术品生成相对应的数字凭证,不仅可以保护版权,还能实现数字化发行、购买、收藏和使用,具有可追溯、难以篡改、唯一性等特点。二、数字藏品的特点数字藏品有四个特点,第一

NFT系统开发公司带你了解NFT系统开发

  NFT市场目前如火如荼,各大互联网公司纷纷推出自己的NFT系统,都准备抓住这个机会。 NFT平台分为两种模式基于联盟链的开发和基于公链的开发。  一、基于联盟链开发  联盟链是国内互联网巨头推出的区块链底层技术,保证数据的真实性、唯yi

三问直播系统开发:如何开发?找谁开发?以后如何发展?

目前,直播行业的发展趋于稳定,互联网的红利并不比原来的红利,所有直播的受欢迎程度都在降温。随着直播技术的发展,直播系统的发展越来越成熟,使直播系统的发展越来越接近人们。那么,如何开发一个直播系统呢?你能找到谁来开发它呢?如何开发现场直播系统

想开发一个红洞数藏网站系统的网站系统你怎么能错过这些

  红洞数字藏品平台(简称红洞数藏)是一个区块链数字收藏电子商务平台,红洞数藏网站系统提供IP内容数字资产发行、销售等配套服务。 于2021年12月5日在2021中国元宇宙峰会上正式发布。红洞数藏网站系统是新的数字藏品在线交易平台,在这里浏

操作系统开发有多难?中国为何还没有可媲美Windows的操作系统?

操作系统开发到底难在哪里呢?现在市场还是Windows、安卓、iOS三分天下。操作系统按应用领域可分为:桌面操作系统移动端/手机操作系统服务器操作系统和云嵌入式、物联网操作系统等其他设备操作系统目前,桌面操作系统方面,Windows、Mac

信息系统—系统开发路线、方法与工具

信息系统—系统开发路线、方法与工具.m4a1:36来自LearningYard学苑—系统开发路线、方法与工具—信息系统Information system“系统开发的路径:系统开发目标—开发路线—开发方式—具体开发方式—开发工具和技术Pat

信息系统项目管理师必背核心考点(二)信息系统开发方法

科科过《每天一小时 俩月拿证》为您带来软考信息系统项目管理师核心重点考点(二):信息系统开发方法,内含思维导图+真题。【信息系统项目管理师核心考点】信息系统开发方法1.结构化方法特点:目标清晰化【工作阶段化】,文档规范化,设计方法结构化缺点

智能垃圾分类系统|垃圾分类系统开发|垃圾分类科普软件

有数据表明现在垃圾中占比大的就是生活垃圾,只要在这个环节中处理好垃圾分类的话就能大大减少垃圾的污染和资源的浪费,垃圾对于我们来说就是不需要的东西都能归类为垃圾,但是其中垃圾中还是有很多有用的东西,只要合理的区分一下就能变废为宝,这就是垃圾分

固定资产管理系统开发流程(固定资产管理系统业务处理流程)

  对大多数中小企业来说,订购固定资产管理软件的预算是有限的。标准软件不能满足企业的需求,独立开发软件太贵了。因而,在这样的情况下,选择基于成熟架构的个性定制开发是一种具有成本效益的方式。  因而,不可避免地要寻找简单、高效的管理手段。在充

数字藏品系统开发搭建(系统搭建、部署源码)

数字藏品,从文化角度来说,它是一种科技赋能与文化IP巧妙融合的产物,将文化收藏品数字化并完成上链,成为一种独特的存在。能够对其进行标记生成唯一数字凭证,有效保护发行者版权和消费者权益。从技术角度来说,数字藏品是在合规管理架构下,对NFT技术

攻城狮们,大型系统开发过程中会面临哪些系统工程管理挑战呢?

ISO / IEC / IEEE 15288:2015 Systems and software engineering — System life cycle processes该标准建立了一个通用过程框架,用于描述采用系统工程方法构建的

NFT数字藏品系统开发作为中小企业该如何部署自己的系统

  2021年以来,NFT市场迅速扩张。 交易量方面,2021 年 NFT 市场总交易量将达到 4336 万笔,比上年增长 40 倍以上; 单月最高交易量为592万笔,比上年增长39倍。 从成交均价来看,2021年月均成交价为365美元/件

数字藏品APP系统开发|数字藏品系统

数字收藏是应用区块链技术对数字作品、艺术品和商品的所有权进行识别。数字收藏品可以在区块链网络中标记其所有者,并追踪其后续流通情况,包括但不限于数字图片、音乐、视频、电子门票、数字纪念品等方式。简单来说,数字收藏APP系统的开发就是通过区块链

软件开发和系统开发的区别

经常有人问起软件开发和系统开发的区别,今天我们来描述一下二者的区别。软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。软件一般是用某种程序设计语言来实现的。通常

一对一系统开发——一对一源码开发

一对一视频,字如其义,一对一视频能更好地保护观众们的隐私,如今任何东西都公开化的年代中,后期伴随着直播间的戏份又新增了一对一视频,计时房间,游戏,购物链接等等功能,还有直播间+短视频模式,社区公会的增加等功能。从这些方面来看,直播间的功能早

友情链接

网址导航 SEO域名抢注宝宝起名网妈妈知道币圈云浮新闻头条网金华新闻资讯网德国旅游网澳大利亚旅游网电饭煲品牌网海信电视评测网丹霞山旅游攻略西门子冰箱评测网贵州旅游网湄洲岛旅游网绝味鸭脖资讯网酒鬼酒股票行情网生鲜电商网海外移民资讯网科勒卫浴资讯网
数字藏品系统开发网是目前国内领先的数字艺术品、nft、元宇宙、数字藏品、nft开发、数字藏品平台、数字藏品平台建设、数字藏品平台开发、nft平台开发数字收藏品交易业务、NFT艺术品交易业务专用系统平台,为品牌提供一站式建设数字藏品平台服务,拥有丰富的数藏平台建设与运营经验。
数字藏品系统开发 hezua.cn ©2022-2028版权所有