一尘不染

socket.io如何工作?

node.js

我正在使用socket.io,并且安装迅速(这要归功于其用法页面上的示例),但我想了解有关幕后到底发生了什么以及使它起作用的技术的更多信息。

socket.io的确切机制是什么?

是在端口80上还是在另一个端口上?

它真的保持打开状态还是被模拟了?

有没有一种方法可以分析每个套接字事件?(有点像使用提琴手来查看ajax调用中会发生什么)


阅读 194

收藏
2020-07-07

共1个答案

一尘不染

为了进行调试,您可能需要尝试 Theseus

这是 socket.io SPEC 的简短概述:

Socket.IO旨在将类似WebSocket的API引入许多浏览器和设备,并具有一些特定功能来帮助创建现实世界的实时应用程序和游戏。

  • 多种传输支持(旧用户代理,移动浏览器等)。
  • 同一连接(名称空间)下的多个套接字。
  • 通过心跳进行断线检测。
  • 可选的致谢。
  • 带缓冲的重新连接支持(适用于移动设备或不良网络)
  • 位于HTTP之上的轻量级协议。

Socket.IO套接字的剖析

Socket.IO客户端首先决定要用于连接的传输。

在Socket.IO插座的状态可以是disconnecteddisconnectingconnectedconnecting

传输连接可以是closedclosingopen,和 opening

一个简单的HTTP握手在Socket.IO连接的开始进行。如果成功握手,则客户端将收到:

  • 将为传输打开连接而提供的会话ID。
  • 预期心跳的秒数(heartbeat timeout
  • 如果未重新打开传输连接(close timeout),则认为套接字已断开,传输连接关闭后的秒数。

在这一点上,套接字被视为已连接,并且向传输器发送了信号以打开连接。

如果传输连接已关闭,则两端将缓冲消息,然后适当地对其进行构架,以便在恢复连接时将其作为批发送。

如果在协商的超时时间内未恢复连接,则认为套接字已断开连接。此时,客户端可能决定重新连接套接字,这意味着需要进行新的握手。

如果您需要更多详细信息,则可以在此处阅读本规范的其余部分。

2020-07-07