Я пытаюсь реализовать веб-сокет через Faye Websocket.
До сих пор я мог реализовать промежуточное ПО для веб-сокета на серверной части и клиентском JS, чтобы открывать веб-сокет и отправлять и получать данные с обеих сторон.
Теперь на бэкэнде rails я обрабатываю сообщение веб-сокета, полученное через мой собственный класс внутри папки lib. Я хотел бы получить IP-адрес клиента (планирую добавить информацию user_agent, когда я решу получить IP-адрес) через «request.remote_ip» в myClass в папке lib, к сожалению, получить к нему прямой доступ невозможно.
Не могли бы вы подсказать, как я могу получить доступ к объекту "запрос" в папке 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>
Я не вызываю метод настраиваемого класса из контроллера. Я пытаюсь использовать веб-сокет .. И myClass обрабатывает сообщение, полученное через веб-сокет. Я также не предпочитаю отправлять клиентский IP-адрес в веб-сокете, который может быть изменен вручную.
Можете ли вы добавить больше контекста, например, где вызывается класс и когда запускается вызов?
У меня есть промежуточное ПО Faye :: Websocket, которое прослушивает соединения с веб-сокетами. Внутри кода промежуточного программного обеспечения я вызываю myClass с сообщениями сокета в качестве параметров





Используйте так: -
В 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
поскольку я не звоню из ApplicationController, это невозможно
Я обнаружил, что объект Faye Websocket также хранит переменные среды, которые включают в себя IP-адрес клиента и информацию о пользовательском агенте, которую я искал.
user_agent: socket.env["HTTP_USER_AGENT"],
ip_address: socket.env["REMOTE_ADDR"]
Поэтому вместо объекта запроса я получил эту информацию напрямую из объекта Faye websocket.
передать
requestиз контроллера в качестве параметра в библиотеку