依赖关系图

socket.io codebase跨多个存储库拆分:

下图显示了每个项目之间的关系:

依赖图

每个项目都有自己的一套功能:

engine.io-parser

是用于engine.io协议编码的javascript解析器,由 engine.io-clientengine.io 共享。

协议的规范可以在这里找到:https://github.com/socketio/engine.io-protocol

engine.io

engine.io是socket.io基于传输的跨浏览器/跨设备双向通信层的实现。

它的主要特点是能够在飞行中交换传输。连接(由 engine.io-client 对应方启动)从xhr轮询开始,但如果可能,可以切换到websocket。

它使用 engine.io-parser 对数据包进行编码/解码。

engine.io-client

这是engine.io的socket,是基于传输的socket.io跨浏览器/跨设备双向通信层的实现。

它在浏览器(包括HTML5 WebWorker )和node.js中运行。

它使用 engine.io-parser 对数据包进行编码/解码。

socket.io-adapter

这是默认的socket.io内存适配器类。

此模块不适用于最终用户,但可以用作从您可能想要构建的其他适配器(如socket.io-redis)继承的接口。

socket.io-redis

这是使用redis 发布/订阅 机制在多个节点之间广播消息的适配器。

socket.io-parser

用符合socket.io-protocol 第3版的javascript编写的socket.io编码器和解码器。由socket.iosocket.io-client使用。

socket.io

socket.io给engine.io“raw”api带来了一些语法上的优势。它还引入了两个新的概念,即rootnamespace,这引入了通信通道之间的关注分离。请参阅相关文档

默认情况下,它在/socket.io/socket.io.js处公开客户端的浏览器构建。

socket.io-client

这是socket.io的客户端。它依赖于engine.io-client,它管理传输交换和断开检测。

它会自动处理重新连接,以防基础连接被切断。

它使用socket.io-parser对数据包进行编码/解码。