Socket.IO 中文笔记

Socket.IO 由两部分组成

  1. 与Node.JS HTTP Server集成(或安装)的服务器
  2. 在浏览器端加载的客户端库

主要特性

可靠性

因为防火墙会关闭长时间处于非活跃状态的连接而导致socket连接中断,通过心跳机制可以保持长连接。

自动重新连接支持

除非得到指示,客户端会一直尝试重新连接到服务器,直到连接成功

断线检测

在Engine.IO层实现心跳机制,允许服务器和客户端知道另一个机制何时不响应

通过在服务器和客户端上设置定时器来实现该功能,在连接握手期间共享超时值(pingInterval和pingTimeout参数)

二进制支持

可以发出任何可序列化的数据结构

多路复用支持

为了在应用程序中创建关注点分离(例如,每个模块或基于权限),Socket.IO允许您创建多个命名空间,这些命名空间将充当单独的通信通道,但将共享相同的底层连接。

房间支持

在每个命名空间中,您可以定义套接字可以加入和离开的任意通道,称为Rooms。 然后,您可以广播到任何给定的房间,到达已加入它的每个套接字。

这是一个非常有用的功能,可以将通知发送给一组用户,或者发送给连接在多个设备上的给定用户。

这些功能带有一个简单方便的API,如下所示:

io.on('connection', function(socket){
  socket.emit('request', /* */); // emit an event to the socket
  io.emit('broadcast', /* */); // emit an event to all connected sockets
  socket.on('reply', function(){ /* */ }); // listen to the event
});

Socket.IO不是WebSocket实现。 尽管Socket.IO确实在可能的情况下使用WebSocket作为传输,但它会为每个数据包添加一些元数据:数据包类型,命名空间和需要消息确认时的确认ID。 这就是为什么WebSocket客户端无法成功连接到Socket.IO服务器,并且Socket.IO客户端也无法连接到WebSocket服务器。

Socket.IO允许您发出和接收自定义事件。 除了连接,消息和断开连接,您还可以发出自定义事件

原文地址:https://www.cnblogs.com/goOtter/p/10113246.html