【问题标题】:Socket.io. How to detect incoming data套接字.io。如何检测传入数据
【发布时间】:2015-04-23 03:59:38
【问题描述】:

对于 socket.io,除了作为“事件”类型发出的数据之外,您如何侦听传入的数据?我正在寻找读取和检测 ProxyProtocol 字符串。

【问题讨论】:

  • ProxyProtocol 字符串是什么意思?一个已经建立的 socket.io 套接字只发送一种数据报。建立 socket.io 连接从一个 http 请求开始,因为这就是 webSocket 的工作原理
  • 我的 socket.io 服务器位于 LoadBalancer 后面,它发送一个 ProxyProtocol 字符串,其结构类似于“PROXY TCP4 198.51.100.22 203.0.113.7 35646 80\r\n”。它没有包含在任何 HTTP 中,只是一个字符串。不确定是否可能。
  • 如何发送该字符串?它不能在 webSocket 上发送它,因为这会违反协议。
  • 您甚至没有在常规浏览器对服务器的 https 请求(不是 websocket 请求)上获得 HIHIHI 吗?你确定你的 https 服务器在监听吗?

标签: socket.io


【解决方案1】:

我做了一点研究。看起来代理字符串是在与 GET 命令不同的行中与初始 http 请求一起发送的,如下所示:

PROXY TCP4 192.168.0.1 192.168.0.11 56324 80\r\n
GET / HTTP/1.1\r\n
Host: 192.168.0.11\r\n
\r\n  

你可以在this article看到这个解释。

因此,这需要由 http 服务器处理,该服务器负责启动 webSocket 的初始 HTTP 请求。这发生在 webSocket 建立之前的初始连接阶段。所以,这不是你事后听的东西。需要对 socket.io 代码进行一些研究才能确定它是否已经将该信息存储在 socket.io socket 上,或者如何挂钩到初始 http 处理程序以查看此信息。我会做更多的研究。

【讨论】:

  • 哇,谢谢哥们!你的回答确实给了我一些想法。我现在正在弄清楚如何从 NodeJS HTTP 层获取它
  • 您好 jfriend00,我尝试从 HTTP 层获取它。但它不起作用。你能看到上面的EDIT吗?
  • @ngzhongcai - 查看this answer,这表明您可以从socket.handshake.headers['x-forwarded-for'] || socket.handshake.address.address 获取remoteAddress,其中socket 是socket.io 套接字。
  • 嗨 jfriend00,它有点俗气。 AWS ELB。代理协议。 Socket.Io.
猜你喜欢
  • 2022-01-05
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 2016-12-05
  • 2017-02-05
  • 1970-01-01
  • 2022-09-25
  • 1970-01-01
相关资源
最近更新 更多