Websocket标头丢失了

时间:2013-08-17 07:20:21

标签: ruby-on-rails sockets ssl rack faye

我正在使用Rails 3.2.13的'faye'宝石。在开发中,我在localhost:9292上运行faye,在localhost:3000上运行我的应用程序。我可以通过命令行的curl请求激活弹出窗口,但我无法在我的应用程序中建立连接。我在控制台中遇到的错误是:

与'ws:// localhost:9292 / faye'的WebSocket连接失败:WebSocket握手期间出错:缺少“升级”标题

我正在尝试在application.js文件中为faye定义标题:

$(function() {
  var faye = new Faye.Client("http://localhost:9292/faye");
  faye.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");
  faye.subscribe('/messages', function (data) {
  alert(data);
  });
});

这是添加标题的正确方法吗?

我在这里找到了类似问题的讨论:https://github.com/faye/faye/issues/222在这种情况下,错误似乎与未加载的ssl设置有关。我检查了我的机架gem的lib目录并找到了

def ssl?
  scheme == 'https'
end

这似乎很好。如何知道设置是否未正确加载?

非常感谢任何有关下一步观看的线索。

1 个答案:

答案 0 :(得分:35)

在跟随Ryan Bates的railscast时遇到了同样的问题:http://railscasts.com/episodes/260-messaging-with-faye

Faye Web套接字服务器需要适配器才能在Thin Web服务器上运行并发送升级标头。

将此行添加到您的Faye rackup(.ru)文件中:

Faye::WebSocket.load_adapter('thin')

我在这里找到了这个解决方案:https://github.com/ryanb/private_pub/issues/39#issuecomment-4225647