如何编写自己的 TCP/IP 或 ISO/OSI 堆栈来使用 WebSockets 而无需每次都使用握手?

How to write own TCP/IP or ISO/OSI stack to use WebSockets without using handshake every time?

我的目的是使用具有自己的 TCP/IP 或 ISO/OSI 堆栈的 WebSockets。我想对从客户端到应用程序服务器的所有请求进行负载平衡(因为我们知道 WebSockets 只能与一个已建立连接的服务器一起工作)。我希望能够连接到一个节点并向任何节点发送请求。

下一个算法是:
1.客户端与负载均衡器后面的节点之一建立连接。
2.客户端通过WebSocket向负载均衡器发送数据。
3. 负载均衡器接收数据并发送到任何服务器。
4. 服务器看到数据并将其发送给应用程序。即使尚未建立连接,服务器也不会丢弃数据包,它只是将数据包发送到应用程序。

在这种情况下,我们可以轻松地对 WebSockets 请求进行负载平衡。我试图了解如何重写 TCP/IP 堆栈并让数据包直接进入用户 space 中的应用程序,但我很困惑。

需要用到DPDK吗?是,那么您能否展示一个最小示例,说明如何直接接收和发送数据包或如何跳过连接检查?如果不是,那么在这种情况下我们需要使用什么?

如果您只是想重新加载平衡现有的 webSocket 连接,那么通过几行客户端代码,您可以向客户端发送 "reconnect" 消息,客户端将断开当前的 webSocket 连接然后重新连接一个新连接。

此重新连接将允许您的服务器场 reload-balance 该新连接。

请记住,传入的 webSocket 连接以带有 "upgrade" header 的 HTTP 请求开始,因此这就是您在负载平衡中寻找的内容。

如果您在客户端和服务器(webSocket 之上的消息传递层)都使用 socket.io,那么它会自动重新连接,因此您甚至可以在服务器断开连接,然后 socket.io 将在没有任何新客户端代码的情况下自动重新连接。