Соединение Websocket закрывается без открытия на сервере Shotgun
У меня есть приложение Sinatra, которое использует Websockets.
Мое приложение работает, когда я запускаю его с ruby app.rb
, но не, когда я пытаюсь запустить его с shotgun app.rb
,
Это в моем send_out.erb:
<script>
$(document).ready(function(){
connection = new WebSocket('ws://' + window.location.host + window.location.pathname);
connection.onopen = function(){
$("#msgs").append('Connection opened'+"<br>")
};
connection.onmessage = function(e){
$("#msgs").append(e.data+"<br>");
};
connection.onclose = function() {
$("#msgs").append('Connection closes from view'+"<br>");
};
$("form").submit(function(){
connection.send( $("input").val() );
});
});
</script>
И это в моем app.rb:
require 'sinatra-websocket'
set :sockets, []
get '/sending_out' do
request.websocket do |connection|
connection.onopen do
connection.send("Hello World!")
settings.sockets << connection
connection.send("opened")
connection.send("went")
end
connection.onmessage do |msg|
EM.next_tick { settings.sockets.each{|s| s.send(msg) } }
end
connection.onclose do
warn("websocket closed")
settings.sockets.delete(ws)
end
end
end
Должно показать
Connection opened
Hello World!
opened
went
когда я иду на страницу. Но это только показывает
Connection closes from view
с дробовиком.
И в консоли говорится, что соединение WebSocket с 'ws://127.0.0.1:9393/send_out' завершилось неудачно: ошибка во время рукопожатия WebSocket: неожиданный код ответа: 500.
Есть ли проблема с запуском Websockets с ружьем?
1 ответ
Главной особенностью Shotgun является то, что он автоматически перезагружает весь ваш код при каждом запросе, и я думаю, что это также может быть проблемой, с которой вы столкнулись.
Дробовик следует использовать только для разработки.
Для производственных целей у вас есть много других доступных вариантов:
Сравнение рубиновых серверов можно найти на https://www.digitalocean.com/community/tutorials/a-comparison-of-rack-web-servers-for-ruby-web-applications