websocket-rails:服务器发出 http:// 协议;客户端期望 ws:// 协议

Posted

技术标签:

【中文标题】websocket-rails:服务器发出 http:// 协议;客户端期望 ws:// 协议【英文标题】:websocket-rails: Server emits http:// protocol; client expects ws:// protocol 【发布时间】:2016-02-18 14:46:30 【问题描述】:

来自Using the javascript Client:

请注意服务器 URL 上缺少协议前缀。不要将 http:// 或 ws:// 添加到您传递给新调度程序的 URL。 WebSocketRails 将为您选择最佳的可用传输并自动添加正确的前缀。

我是第一次使用 WebSocketRails。我在客户端收到此错误:

到 'ws://localhost:3000/websocket' 的 WebSocket 连接失败:在收到握手响应之前连接已关闭

如果我将浏览器导航到http://localhost:3000/websocket,我会收到我期待的消息。如果我导航到ws URL,我会得到ERR_DISALLOWED_URL_SCHEME。所以看起来服务器正在生成消息,但客户端正在尝试错误的协议。

如何强制客户端使用http协议而不是ws,或者强制服务器使用ws而不是http进行广播?

【问题讨论】:

【参考方案1】:

通过深入源码终于找到了答案。构造函数的第二个参数称为use_websockets,默认为true。将其设置为false 显然会强制它使用http 而不是ws

var dispatcher = new WebSocketRails('localhost:3000/websocket',false);

【讨论】:

我花了一段时间才找到这个答案。否则它对我不起作用。

以上是关于websocket-rails:服务器发出 http:// 协议;客户端期望 ws:// 协议的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 + Websocket-rails + Passenger + Nginx + 负载均衡器

为啥 websocket-rails 需要作为独立服务器启动以支持基于非事件机的 Web 服务器?

用于 websocket-rails gem 的 Ruby websocket 客户端

websocket-rails,websocket握手错误

gem“websocket-rails”及其可扩展性

Websocket-Rails 和 IE 8