我正在尝试通过Faye Websocket实现websocket。
到目前为止,我能够在后端和客户端JS上实现websocket中间件,以打开websocket并在两端发送和接收数据。
现在在rails后端,我正在处理通过lib文件夹中的自定义类接收的websocket消息。我想通过" request.remote_ip"来获取客户端IP地址(计划在我解决获取IP地址时添加user_agent信息)。在lib文件夹中的myClass中,遗憾的是无法直接访问它。
您能指导我如何访问"请求" lib文件夹中的对象?
LIB / myClass.rb
class myClass
ip_address = request.remote_ip
end
#<NameError: undefined local variable or method `request' for #<myClass:0x0055c6fb18d860>
Did you mean? require>
答案 0 :(得分:0)
使用: -
在lib/my_class.rb
class MyClass < Struct.new(:request)
def self.call(request)
new(request).call
end
def call
ip_address = request.remote_ip
end
end
来自some_controller
: -
class SomeController < ApplicationController
def some_method
MyClass.call(request)
end
end
答案 1 :(得分:0)
我发现,Faye Websocket对象还存储了环境变量,其中包括我正在寻找的客户端IP地址和用户代理信息。
user_agent: socket.env["HTTP_USER_AGENT"],
ip_address: socket.env["REMOTE_ADDR"]
因此,我直接从Faye websocket对象中获取了这些信息,而不是请求对象。