【问题标题】:How to differentiate client TCP socket and client websocket using socket.io library?如何使用 socket.io 库区分客户端 TCP 套接字和客户端 websocket?
【发布时间】:2019-04-02 00:43:32
【问题描述】:

如何处理来自客户端 TCP socket 和客户端 Websocket 相同端口的请求?

【问题讨论】:

    标签: node.js websocket tcpclient


    【解决方案1】:

    这需要一些创造性的工作,因为您必须等到第一个数据到达新连接的套接字才能识别它必须是什么类型的连接。两者都以传入的 TCP 连接开始。

    然后,webSocket 连接跟随初始 TCP 连接和一个请求将协议升级到 webSocket 协议的 http 请求。您可以检查到达新连接的 TCP 套接字的第一个数据,并检查套接字上的第一个数据是否确实是该形式的 http 请求。如果是,那么它是一个传入的 webSocket 连接。

    如果不是,那么它一定是您的常规 TCP 连接。无论哪种情况,一旦您确定了它必须是哪种类型的连接,您就会将初始数据传递给该类型连接的适当处理程序,以便它可以接管该套接字的处理。

    一个有点相似的模型被用来允许一个http服务器和一个webSocket服务器共享同一个端口。这对他们来说更容易一些,因为这两个协议都以 http 请求开始,但想法是相同的,因为当 webSocket 服务器共享一个 http 服务器时,它会检查传入的请求以查看它是否看起来像 webSocket 连接的开始(带有upgrade 标头的http 请求)。如果是这样,它将请求传递给 webSocket 处理代码。如果不是,则将其视为正常传入的http请求,并将其传递给http请求处理代码。

    您可以在此处查看初始 webSocket 连接的外观:How does WebSockets server architecture work? 和此处:node js net sockets + websocket without socket.io。两者都会向您展示启动所有 webSocket 连接的初始 http 请求的形式。

    【讨论】:

      猜你喜欢
      • 2012-03-29
      • 2013-10-24
      • 2015-06-18
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      相关资源
      最近更新 更多