首页 > 编程知识 正文

轮训怎么实现,java消息通知框架

时间:2023-05-03 08:16:21 阅读:25967 作者:2180

一、webim如何实现消息推送

webim通常有三种实现推送通道的方法。

1 )网络插座

2 ) FlashSocket

3 ) http轮询

其中1 )和2 )通过Tcp长连接实现,其消息的实时性可以很好地理解,但这两种方案都有一些局限性,不能通用。

3 )这才是webim实现消息推送的“正统”方案,通过http短连接轮询方式实现“伪长连接”。 既然是轮询,有朋友就质疑消息的实时性。 本文介绍了webim如何使用http长轮询来确保消息的绝对实时性。

二、为什么人们会误解http长轮询不是实时的

什么是轮询? 我擦,这个该怎么解释?

举个板栗吧。 我想在电车里上厕所,所以冲到厕所旁边,但我发现厕所里有人。 我只能在那里回到座位上继续等待。 n分钟后,又朝厕所的方向挤去,但厕所里还有人,只能再坐着等。 这样,再每隔三次去厕所n分钟,检查一下有没有蹲在厕所里就是轮询。

如果webim通过轮询提取消息,会有什么问题?

webim每n分钟轮询并调用一次“获取消息”接口。 可能会发生消息延迟。 在某个时刻刚取出消息后,突然发生了新消息。 在n分钟后再次启动“获取消息”轮询之前,无法获取此消息。

缩短轮询间隔是否可以解决消息延迟问题?

减小轮询间隔确实可以缩短延迟时间,但不能保证消息的绝对实时性,同时会产生新的副作用。 大多数轮询呼叫没有返回消息,导致服务端大量资源浪费。

很多人基于上述直觉认为,webim使用http长轮询方法提取消息会导致消息延迟,但实际上webim的http长轮询并不怎么玩。

三、长轮询实际上怎么玩

消息连接

在webim和web服务器之间建立http连接,专门用作消息通道。 该连接称为http消息连接【参照下图】

消息连接的四个特性

1 )如果没有收到消息,则此http消息连接将被夯并不返回。 由于http是短连接,因此此http消息连接最多夯击90秒钟就会断开(这是浏览器或web服务器的行为)。

2 )1)的情况下,在http消息连接被断开的情况下,立即重新开始http消息连接(参照下图的步骤1、2 )

3 )在1 )和2 )的合作下,浏览器和web服务器之间总是连接一条消息,每次收到消息,该消息连接都会立即向浏览器页面返回消息,返回后立即又会有一条http消息

4 )消息到达时,如果前一个http消息连接返回且http消息连接不可用(理论上http消息连接返回是瞬时的,连接不可用的可能性极低),则将消息临时保存在消息池中

上面的1-4确保总是连接一条http消息,以保证webim消息推送的绝对实时性。

四.结论

webim通过http长轮询保证消息的绝对实时性。 这种实时性的保证不是通过增加轮询频率来保证的,而是通过随机化http消息连接来保证。 如果没有大部分时间实时消息,则此http消息连接对web服务器的请求压力为90秒一次,可以大大节省web服务器资源。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。