我正在尝试从客户端到我的RoR应用程序设置一个基本的websocket。我已经使用了websocket-rails gem。
我已经设置了一个简单的eventMap映射。 配置/ events.rb:
WebsocketRails::EventMap.describe do
namespace :tasks do
subscribe :create, :to => TaskController, :with_method => :create
end
end
一个简单的控制器: 应用程序/控制器/ task_controller.rb:
class TaskController < WebsocketRails::BaseController
def create
puts "In task create"
send_message :create_success, task, :namespace => :tasks
end
end
最后从客户端进行初始化:
$(function() {
var task = {
name: 'Start taking advantage of WebSockets',
completed: false
}
var dispatcher = new WebSocketRails('localhost:3000/websocket');
dispatcher.on_open = function(data) {
alert("on_open");
console.log('Connection has been established: ', data);
// You can trigger new server events inside this callback if you wish.
}
$("#ws-test").click(function() {
dispatcher.trigger('tasks.create', task);
});
dispatcher.bind('tasks.create_success', function(task) {
console.log('successfully created ' + task.name);
})
});
当访问触发此代码的页面时,在网络流量中,我看到了对ws:// localhost:3000 / websocket的请求。 该请求将返回状态码 101切换协议。 js中没有错误,也没有服务器端的日志。
这是我感到困惑的地方。通过RFC 101意味着握手成功,所以我认为连接初始化完成得很好。
但是,在检查和调试客户端时,dispatcher.state仍然在&#34;连接&#34;。
尝试调用dispatcher.trigger时,没有任何反应。
在调试websocket-rails内部代码时,在触发器期间检查dispatcher.state,如果它没有连接&#34;,则将其推送到队列而不是继续处理它。
这就是它永远陷入困境的原因。在Mozilla Firefox 33.0和Chrome版本38.0.2125.104上进行了测试
任何见解都将不胜感激。
ruby 2.0.0p576
Rails 4.1.1
websocket-rails-0.7.0