跳到主要内容

Socket理解

最近看到一个ws的连接,之前没咋用到过ws,所以有一些问题,在结合自己和理解和群友的帮助下,总结了一下。 其实socket很早就听说过,就是长连接,既可以客户端给服务端发消息,也可以服务端给客户端发消息,这样就是一个,解决了http无法主动向客户端推送的问题,这个问题之前都是通过轮询接口的方式去解决。

this.timer = setInterval(() => {
this.send('1');
}, this.time);

这样一个代码一开始让我挺疑惑的,为什么都已经ws了,还需要轮询去发送一个消息呢。这个在ws中有一个专门的词叫心跳连接。为了证明自己和活着,否则因为特殊原因,比如断网,网络波动之类的情况导致ws断开了,服务端无法知道,导致服务器白白浪费资源,并且无法推送消息和接受消息。 我还问了一个问题,如果心跳期间,断开了连接,那么服务端发送的消息会怎么样,得到的答案是这条消息无法发出,并且一般服务端会抛出异常,那么在我理解中这个心跳不就是也可以通过服务端去做吗。这个问题我获得的答案是可以的,不过我又查了些资料,发现服务器去发送心跳不太合适:

  1. 因为客户端发送是吧可以重连,但是服务端无法主动发起连接。
  2. 客户端收到的心跳消息需要去做判断,是否是心跳消息还是普通的推送消息。这样无疑增加了复杂度,而我让服务端发送心跳的初衷就是想简化前端的复杂度。 那些socket代码量其实很少,不过因为之前没接触过,所以一开始看的云里雾里,现在梳理一遍,觉着项目中用到的一般还以没有那么复杂的。 然后群友还推荐了一个socket的包——Socket.IO。看了下文档还是不错的。
Loading Comments...