Websocket连接关闭而不在Shotgun服务器上打开

时间:2014-10-27 15:15:16

标签: ruby websocket sinatra shotgun

我有一个使用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>

这是在我的 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

使用霰弹枪

在控制台中它显示与'ws://127.0.0.1:9393 / sending_out'的WebSocket连接失败:WebSocket握手期间出错:意外响应代码:500

使用Shotgun运行Websockets是否存在问题?

1 个答案:

答案 0 :(得分:2)

Shotgun的主要特点是它会在每次请求时自动重新加载您的整个代码,我认为这也可能是您面临的问题。

霰弹枪应该仅用于开发。

出于生产目的,您还有许多其他选择:

可以在https://www.digitalocean.com/community/tutorials/a-comparison-of-rack-web-servers-for-ruby-web-applications

上找到ruby服务器的比较