В Plezi-х getting started guide говорится, что:
Если ваш класс контроллер определяет ON_MESSAGE (данные) обратного вызова, plezi автоматически включит WebSocket соединения для данного маршрута.
Это утверждение должно быть, вероятно, повторено в websockets и направляющих Rails ... но я все еще пишу документацию и не заполнен.
Чтобы убедиться, что Plezi позволяет использовать веб-сайты для маршрута '/ws'
, добавьте обратный вызов on_message
(даже пустой). то есть:
#config/initializer/plezi.rb
class NewsPublisher
def on_open
binding.pry
end
def on_message data
puts "Websocket got: #{data}"
end
end
Plezi.route '/ws', NewsPublisher
Пожалуйста, дайте мне знать, если у вас есть какие-либо проблемы.
EDIT (добавление дополнительной информации из комментариев)
Plezi использует Iodine, как это сервер, минуя hijack
API Rack (в Йод является быстрое расширение C для Ruby, он действует как сервер Rack, с носителями WebSockets поддержка).
В Plezi-х guide to Plezi with Rails/Sinatra/Rack, утверждается, что при использовании Plezi в Rails/Синатра/Rack:
Там только один улов - мы не можем иметь более одного веб-сервера для каждого приложения. Это означает, что наше существующее приложение Rack ДОЛЖНО использовать Plezi (Iodine, фактически), поскольку это веб-сервер.
Убедитесь, чтобы удалить серверы из Gemfile (т.е. thin
, puma
, unicorn
и т.д. »).
Как насчет Apache (или Nginx) и пассажира?
Apache может перенаправлять запросы на Iodine, подобно прокси и аналогично тому, как Apache работает вместе с пумой, пассажиром, единорогом, тонким и другими приложениями.
Возможно использование Apache или Nginx, но не пассажир.
Производительность?
Проверьте и посмотрите.
Iodine - это расширение C, которое использует либо epoll
, либо kqueue
системные вызовы, которые очень быстры и созданы для параллелизма. Кроме того, у Iodine очень хороший дизайн управления памятью, где объекты Ruby, переданные на «Ruby-land», часто перерабатываются или очищаются, чтобы обеспечить оптимизированную производительность ... но это все просто слово. Существует только один способ узнать - тест.
Просто добавлен метод on_message, но он не исправляет проблему, у меня такие же ошибки. –
@SergeiStruk Предполагаю, что вы перезапустили приложение ...? Я немного удивлен. Я немного поеду на свой ноутбук, чтобы экспериментировать. Единственное различие, которое я могу придумать (у меня есть приложение с Rails и Plezi), заключается в том, что я мог написать «Plezi.route' вместо« route »... – Myst
У меня есть класс в течение следующих двух часов ... Для теперь, пожалуйста, разместите файл gem и убедитесь, что вы не используете другой сервер (не используйте 'thin' или' puma') или драгоценный камень, который добавит его собственный сервер. – Myst