返回

关于WebSocket的记录与实践笔记

前端

最近中途接手了一个请求网络请求优化需求。具体场景是这样的:打开项目,尝尝会并发海量的请求,而微信小程序自身的限制是最多十条请求。落实到我们正常的场景中,除了业务请求,还有各种监测埋点请求。目前有两种方式在讨论中:

第一种使用worker。worker 本质上是一个单独的js 线程,用来处理额外的脚本,并且它不会阻塞主线程。也就是说,在浏览器中运行的任务中,当我们需要执行耗时较长的任务时,把它们转移到worker中执行,这可使得我们任务执行的延迟不会阻塞主线程,从而也实现了并发。那么业务请求和监测埋点的请求都可以按需在worker中发送请求。

第二种是Websocket。目前,在大厂和中厂都在积极推广使用websocket技术,或者已经使用了WebSocket技术。Websocket是HTML5规范中的一种全新协议。它使得浏览器和服务器之间可以进行双向通信,而且不需要像HTTP那样每进行一次通信就建立一次连接。这使得WebSocket非常适合构建实时应用,例如聊天室、游戏等。那么使用websocket之后,在微信小程序中只需要建立一条请求,通过请求后websocket将建立一条长连接,而业务请求和监测埋点的请求则通过长连接实时发送请求,从而解决了请求限制的问题。并且可以减少请求与响应所需要经历的网络次数,这样能提升网页的浏览效率,使网页的浏览更加快速。

对于业务而言,使用WebSocket相对于使用worker 有一些优点:

  1. Websocket是基于TCP的,而worker是基于HTTP的。TCP是一种面向连接的协议,而HTTP是一种无连接的协议。这意味着WebSocket连接一旦建立,客户端和服务器就可以一直保持通信,而无需为每个请求都建立新的连接。这使得WebSocket非常适合构建实时应用。
  2. WebSocket是双向通信协议,而worker只能从服务器端接收消息。这意味着客户端可以使用WebSocket向服务器端发送消息,而服务器端也可以向客户端发送消息。这使得WebSocket非常适合构建交互式的应用。
  3. WebSocket比worker更加安全。WebSocket连接是加密的,而worker连接是未加密的。这意味着WebSocket连接中的数据不会被窃听。

那么对于技术而言,使用WebSocket还有一些优势:

  1. 减少请求与响应所需要经历的网络次数,提升网页的浏览效率。
  2. 建立WebSocket连接之后,浏览器与服务器之间无需进行握手,从而减少请求与响应所需要经历的网络次数,提升网页的浏览效率。

当然,使用WebSocket也有一些缺点:

  1. 浏览器需要支持WebSocket协议。目前,所有主流浏览器都支持WebSocket协议,但是一些旧版本的浏览器可能不支持WebSocket协议。
  2. WebSocket连接只能在同一个域下建立。这意味着客户端和服务器必须位于同一个域下,才能建立WebSocket连接。
  3. WebSocket连接可能会被防火墙或代理服务器阻止。

那么在上述两种方式中,哪一种比较好呢?其实,这两种方式各有优缺点,具体使用哪种方式需要根据实际情况来决定。如果需要构建实时应用,那么使用WebSocket是一个不错的选择。如果需要处理大量请求,那么使用worker是一个不错的选择。