2015-04-23 142 views
1

对于socket.io,如何侦听传入数据而不是以“事件”类型发送的数据?我正在阅读并检测ProxyProtocol字符串。Socket.io。如何检测传入数据

+0

你是什么意思'ProxyProtocol'字符串?已经建立的socket.io套接字只发送一种数据报。建立一个socket.io连接开始于一个http请求,因为这就是webSocket的工作原理 – jfriend00

+0

我的socket.io服务器位于LoadBalancer后面,它发送一个ProxyProtocol字符串,其结构类似于“PROXY TCP4 198.51.100.22 203.0.113.7 35646 80 \ r \ N”。它不包含在任何HTTP中,只是一个字符串。不知道是否有可能。 – ngzhongcai

+1

发送该字符串如何?它不能在webSocket上发送,因为这会违反协议。 – jfriend00

回答

1

我做了一点研究。它看起来像代理字符串,像这样在单独的行最初的http请求从GET命令发送:

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解释。

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

+0

哇,谢谢哥们!你的回答确实给了我一些想法。我现在想出如何从NodeJS HTTP层获取它 – ngzhongcai

+0

嗨jfriend00,我试图从HTTP层获取它。但它不起作用。你能看到上面的编辑? – ngzhongcai

+0

@ngzhongcai - 看看[这个答案](http://stackoverflow.com/questions/11182980/not-getting-remote-address-while-using-proxy-in-socket-io)这表明你可以得到remoteAddress来自'socket.handshake.headers ['x-forwarded-for'] || socket.handshake.address.address'其中'socket'是socket.io套接字。 – jfriend00