Я реализую небольшой сервер (0.6.0) в ruby, чтобы играть роль прокси для другого протокола с несколькими подключениями (несколькими клиентами) к одному серверу.Я хочу иметь возможность хранить данные для каждого клиента на стороне сервера и отслеживать параметры «сеанса» по нескольким вызовам функций-обработчиков.
В настоящее время я использую Thrift::NonblockingServer
, так как SimpleServer
не позволяет одновременноподключений.
Я знаю, как использовать TCPSocket::peeraddr
, но Thrift::NonblockingServer::IOManager::Worker::run
создает временный MemoryBufferTransport
с прочитанным фреймом и передает его в качестве протокола ввода / вывода в процессор, поэтому кажется, что информацияне передается оттуда.
Есть ли чистый способ сделать это?Я думал о том, чтобы переопределить вышеупомянутый Thrift::NonblockingServer::IOManager::Worker::run
, чтобы он также включал fd или другой идентификатор в качестве дополнительного параметра для обработки или дополнения прототипов, но я также должен беспокоиться об одном слое сгенерированного кода ruby (process_*
методы в class Processor
) это кажется немного тяжелым.
Интересно, делал ли кто-нибудь что-то подобное раньше.
Спасибо!
ps, это похоже на проблему этот вопрос C ++ экономный