我有一个使用Websockets的Sinatra应用程序
当我用ruby app.rb
运行我的应用程序时,它可以工作,但当我尝试用shotgun app.rb
运行它时,它就不工作了。
这在我的sending_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>
这在我的应用程序中。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/sending_out"失败:WebSocket握手期间出错:意外响应代码:500。
使用Shotgun运行Websockets是否存在问题?
Shotgun的主要功能是在每次请求时自动重新加载整个代码,我认为这也可能是您面临的问题。
霰弹枪应该只用于开发。
出于生产目的,您有很多其他选择:
- 彪马
- 彩虹
- 独角兽
- 薄
- 其他
ruby服务器的比较可以在上找到https://www.digitalocean.com/community/tutorials/a-comparison-of-rack-web-servers-for-ruby-web-applications