首页 » Web前端 » phpmysqlwebim技巧_即时通讯IM系统开拓

phpmysqlwebim技巧_即时通讯IM系统开拓

访客 2024-12-14 0

扫一扫用手机浏览

文章目录 [+]

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

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

phpmysqlwebim技巧_即时通讯IM系统开拓

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

phpmysqlwebim技巧_即时通讯IM系统开拓
(图片来自网络侵删)

②做事器中转办法

大部分的互联网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</artifactId>

<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系统了,但是要考虑到后期的扩展性,由于一个好的产品不能自己用,要让更多的人利用。

标签:

相关文章

大数据群智时代,智慧与创新的新引擎

随着互联网的飞速发展,大数据时代已经到来。在这个时代,大数据群智成为了一种新的创新模式。大数据群智是指通过互联网平台,将海量用户的...

Web前端 2024-12-16 阅读0 评论0