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

时间:2016-10-25 10:13:27

标签: sockets networking tcp websocket dpdk

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

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

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

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

1 个答案:

答案 0 :(得分:1)

如果您只想重新平衡现有的webSocket连接,然后使用几行客户端代码,您可以向客户端发送“重新连接”消息,客户端将删除当前的webSocket连接,然后重新连接新的联系。

此重新连接将允许您的服务器场重新平衡该新连接。

请记住,传入的webSocket连接作为HTTP请求启动生命,其上带有“upgrade”标头,这样您就可以通过负载平衡来寻找它。

如果你在客户端和服务器(webSocket顶部的消息传递层)上使用socket.io,那么它会自动重新连接,所以你甚至可以放弃服务器上的连接,然后socket.io将自动重新连接,而不是任何新的客户代码。