如何处理来自具有相同端口的客户端 TCP 套接字和客户端 Websocket 的请求?
这需要一些创造性的工作,因为您必须等到第一个数据到达新连接的套接字时才能辨别它必须是什么类型的连接。两者都以传入的 TCP 连接开始。
然后,webSocket 连接在初始 TCP 连接之后发出 http 请求,请求将协议升级到 webSocket 协议。您可以检查到达新连接的 TCP 套接字的第一个数据,并检查套接字上的第一个数据是否确实是该形式的 http 请求。如果是,则它是传入的 webSocket 连接。
如果不是,那么它一定是您的常规 TCP 连接。在任何一种情况下,一旦您确定它必须是哪种类型的连接,您就会将初始数据传递给该类型连接的适当处理程序,以便它可以接管该套接字的处理。
一个有点相似的模型用于允许 http 服务器和 webSocket 服务器共享相同的端口。这对他们来说更容易一些,因为这两个协议都以 http 请求开始,但想法是相同的,当 webSocket 服务器共享一个 http 服务器时,它会检查传入的请求,看看它是否看起来像 webSocket 连接的开始(带有upgrade
标头的 http 请求)。如果是,它将请求传递给 webSocket 处理代码。如果不是,它会将其视为正常传入的 http 请求并将其传递给 http 请求处理代码。
您可以在此处查看初始 webSocket 连接的外观:WebSockets 服务器架构如何工作?在这里:node js net sockets + websocket without socket.io。两者都会向您展示启动所有 webSocket 连接的初始 http 请求的形式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句