业界动态
使用轮询&长轮询实现网页聊天室
2024-12-20 03:55

   如果有一个需求,让你构建一个网络的聊天室,你会怎么解决?

   首先,对于请求来说,端总是处于被动的一方,即只能由发送请求,才能够被动回应。

   也就是说,如果没有发送请求,则就不能回应。

使用轮询&长轮询实现网页聊天室

   并且具有无状态的特点,即使有长链接(Connection请求头)的支持,但受限于的被动特性,要有更好的解决思路才行。

   根据上面的需求,最简单的解决方案就是不断的朝端发送请求,获取最新的消息。

   对于前端来说一般都是基于来做,但是轮询的缺点非常明显:

  1. Server需要不断的处理请求,压力非常大
  2. 前端数据刷新不及时,setInterval间隔时间越长,数据刷新越慢,setInterval间隔时间越短,Server端的压力越大

   以下是用和做的简单实例。

   每个用户打开该页面后都会生成一个随机名字,前端采用轮询的方式更新记录。

   后端用一个列表存储最近的聊天记录,最多存储100条,超过一百条截取最近十条。

   总体流程就是前端发送过来的消息都放进列表中,然后前端轮询时就将整个聊天记录列表获取到后在页面进行渲染。

   缺点非常明显,仅仅有两个用户在线时,后端的请求就非常频繁了:

   后端代码:


   前端代码:


   前端代码:




   轮询是不断的发送请求,端显然受不了。

   这时候就可以使用长轮询的机制,即为每一个进入聊天室的用户(与端建立连接的用户)创建一个队列,每个用户轮询时都去询问自己的队列,如果没有新消息就等待,如果后端一旦接收到新消息就将消息放入所有的等待队列中返回本次请求。

   长轮询是在轮询基础上做的,也是不断的访问服务器,但是服务器不会即刻返回,而是等有新消息到来时再返回,或者等到超时时间到了再返回。

  1. Server端采用队列,为每一个请求创建一个专属队列
  2. Server端有新消息进来,放入每一个请求的队列中进行返回,或者等待超时时间结束捕获异常后再返回

   使用长轮询实现聊天室是最佳的解决方案。

   前端页面打开后的流程依旧是生成随机名字,后端立马为这个随机名字拼接上uuid后创建一个专属的队列。

   然后每次发送消息时都将消息装到每个用户的队列中,如果有队列消息大于1的说明该用户已经下线,将该队列删除即可。

   获取最新消息的时候就从自己的队列中获取,获取不到就阻塞,获取到就立刻返回。

   后端代码:


   前端代码:


   前端代码:

    以上就是本篇文章【使用轮询&长轮询实现网页聊天室】的全部内容了,欢迎阅览 ! 文章地址:https://sicmodule.kub2b.com/news/9560.html
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站 https://sicmodule.kub2b.com/mobile/ , 查看更多   
最新文章
发改委:推进户用光伏发展,助力农民拓宽增收新路径
中国产品流通经纪人协会供销合作行业标准《农产品食品供应商信用评价规范》参编单位征集函中国农产品流通经纪人协会供销合作行业
泉州百度爱采购运营介绍
百度爱采购入驻条件有哪些:商家需持有工商行政管理局颁发的营业执照,并且执照在6个月有效期内;厂家商品真实在营且符合国家相
抖音feed是什么 feed广告投放流程
feed是什么?feed流(又称信息流)它是穿插在App内容中的广告,具有原生沉浸式体验,支持多种展现形式。feed可以进行线索收集,
抖音投流怎么投?找到最合适的优化路线,实现精准引流与高效转化!
在如今竞争激烈的市场中,抖音广告已经成为商家吸引流量、增加曝光和转化的重要工具。很多企业都在问:“抖音投流怎么投,才能真
提升脸书播放/浏览量:Facebook Workplace的策略
以下介绍:提升脸书播放/浏览量:Facebook Workplace的策略关于提升脸书播放/浏览量:Facebook Workplace的策略所提到的问题请大
想换07年左右的老车,值得吗?
百车全说别人研究车,而我研究你!问:想买一辆2007年左右,绿色(丨), 3.0。主要是喜欢这种雪茄车身,想留着自己偶尔开一下,家
年度盘点丨西安:2024年度十大交通精细化治理案例
​​2024年,西安公安交警深入践行以人民为中心的发展思想,聚焦群众反映强烈的交通问题,坚持缓堵保畅、全域治理,坚持小切口入
怎样才能很好的提高百度SEO的排名呢
怎样使自己的网站在百度等搜索引擎排名靠前  提高用户体验确保网站加载速度快,移动设备友好,并提供良好的用户互动体验。利用
《人工智能:未来世界的“智慧引擎”》
在当今这个科技飞速发展的时代,人工智能(Artificial Intelligence,简称AI)正以前所未有的速度重塑
未来直播技术的创新与发展方向
随着信息技术的快速发展和移动互联网的广泛普及,直播已经成为当今互联网领域的重要应用之一。从最初的娱乐直播到现在的教育直播