技术文档 2

我的技术分享

文档简介

本文档旨在记录项目中的WebSocket模块。

目录

1. WebSocket介绍

不仅对于IM通讯系统,在很多业务中都有用到服务端主动推送web的场景,比如小红点推送提醒,新消息提醒,审批流程提醒等。 目前常见的推送方案有 服务端推送web方案 1)短轮询 web端不停地间隔一段时间想服务端发一个HTTP请求,如果有新消息,就会在某次请求中返回。 比如OA系统,用户需要收到小红点,审批流程提醒等信息,为了方便,直接采用每秒1次的请求,等待后端返回数据。 适用场景: 1.扫码登录:短时间内频繁查询二维码状态; 2.小OA系统:客户端使用量不大的情况下可以使用。 缺点: 1.大量无效请求,浪费服务器资源 2.服务端请求压力过大,万人群聊频繁访问,上万并发服务扛不住。 2)长轮询 长轮询相比于短轮询,最大的改进在于: 1.短轮询模式下,服务端不管本轮有没有新的消息产生,都会马上响应并返回,而长轮询模式当本次请求没有获取新消息时,并不会马上结束返回,而是在服务端“悬挂(hang)”,等待一段时间。 2.如果在等待的这段时间内服务端有新消息产生也就是新数据准备好,就能马上响应返回,当超过等待时间后返回等待超时。 这意味着web端的请求超时时长可以设置得长一些。 优点: 1.大幅降低短轮询中客户端高频无用的轮询导致的网络开销和功耗开销。 2.降低了服务端处理请求的QPS。 缺点: 1.无效请求:长轮询在超时时间内没有获取到消息后,会结束返回,因此仍然没有完全解决客户端“无效”请求的问题。 2.服务端压力大:服务端悬挂请求,只是降低了入口请求的QPS,并没有减少对后端资源轮询的压力,假如有1000个请求在等待消息,可能意味着有1000个线程在不断轮询消息资源,只是轮询转移到了后端。 3)WebSocket长连接 实现原理:客户端和服务器之间维持一个TCP/IP连接,全双工通道。