Это беспокоило меня в течение некоторого времени - кажется, что-то, что должно быть полностью выполнимо, но я застрял.Ruby Threads and Websockets
У меня есть небольшая программа Ruby, которая просто действует как промежуточный. Он длится (несколько минут), блокируя действие (через интерфейс FFI), но предполагается, что он отправляет периодические обновления, которые он получает от этого действия, посредством обратных вызовов в основное приложение Meteor через соединение DDP.
Оба компонента этой программы работают самостоятельно. Через систему я закатил свой собственный, а также metybur gem, я могу общаться с приложением Meteor. И, если я просто использую puts
для вывода данных из обратных вызовов интерфейса FFI, я тоже получаю их. (За исключением того, что по какой-то другой причине я не могу на это положиться, действие FFI/блокировки бессильно выходит из строя, если оно находится в блоке Thread.new
.)
По какой-то причине, однако, когда я пытаюсь отправить данные в Метеор приложение ничего не происходит. ws.send
(on EventMachine) возвращает true
, хотя на самом деле его не вызвали, даже если я положил его в свой собственный блок Thread.new
.
Часть меня подозревает (хотя не может выяснить, как ее протестировать), что соединение потеряно, потому что приложение Ruby не может обрабатывать запросы keepingive ping/pong во время блокировки.
Я пробовал EM.spawn
из EventMachine для процесса блокировки. Я попытался запустить EventMachine в своем потоке, но ничего не работает.
Любопытно, если есть лучшие практики для чего-то подобного, чтобы иметь возможность отслеживать часть приложения EventMachine приложения даже во время операций блокировки с интенсивным использованием процессора?
Пожалуйста, разместите код, чтобы мы могли видеть, что вы пробовали. Кроме того, если вы считаете, что есть проблема с клиентом веб-сокета event-машины, возможно, попробуйте другие клиенты и посмотрите, как это происходит (я написал сервер сервера [GRHttp] (https://github.com/boazsegev/GRHttp) + клиент, который требует Ruby> = 2.1.0, но в дикой природе есть больше решений). – Myst