我的websocket服务器以这种方式运行:
ws_hdl = WebSocketHandler.new do |ws|
# here we should determine the IP address of an incoming connection
end
srv = Server.new ws_hdl
srv.listen("0.0.0.0", 8080)
是否可以获取远程主机的IP地址? 出于日志记录和安全原因,也是必需的。
在此先感谢您提供任何好的建议!
答案 0 :(得分:0)
我不知道您使用的是什么,但是我会使用Kemal来做到这一点:
require "kemal"
ws "/" do |socket, env|
p env.request
end
Kemal.run
标题如下:
HTTP :: Headers {“ Host” =>“ example.com:80”,“ User-Agent” => “ curl / 7.49.1”,“接受” =>“ / ”,“连接” =>“升级”,“升级” =>“ websocket”,“来源” =>“ http://example.com:80”,“ Sec-WebSocket-Key” =>“ SGVsbG8sIHdvcmxkIQ ==”,“ Sec-WebSocket-Version” =>“ 13”}
然后需要在客户端之前设置Nginx之类的代理,以将IP添加到标头:https://stackoverflow.com/a/27458651/1597964
答案 1 :(得分:0)
抱歉,我无法对此进行正确的测试,但是我认为我有解决方案。
该块具有Web套接字ws
,但也可以具有HTTP::Context作为第二个参数。然后,它将包含一个HTTP::Request,其中包含标题。包括类似REMOTE_ADDR
的东西。
ws_hdl = WebSocketHandler.new do |ws, context|
context.request.headers # all headers
context.request.headers["REMOTE_ADDR"]? # Should be the IP address
end
srv = Server.new ws_hdl
srv.listen("0.0.0.0", 8080)