2

我正在试验Ratchet php 库。特别是,我一直在尝试将他们的推送集成演示集成到 React 应用程序中。

他们的演示引用了一个看似一次性的高速公路 JS 库版本,它与我的服务器实现(几乎是他们的演示的副本)相悖。

但是,当我尝试从 npm 使用高速公路 JS 时,一切都崩溃了。似乎这实现了更新版本的 Web Sockets 协议?

一次性版本的高速公路通行证wamp用于Sec-WebSocket-Protocol标头,Ratchet 似乎支持。高速公路的 npm 版本通过wamp.2.json, wamp.2.msgpack...

挖掘棘轮代码我发现了这个

如果堆栈中的任何组件支持 WebSocket 子协议,则返回每个支持的数组

所以我Ratchet\WebSocket\WsServerInterface在我的组件上实现了

public function getSubProtocols()
{
    return ['wamp.2.json', 'wamp.2.msgpack'];
}

现在连接尝试更进一步,但仍然爆炸

由于违反协议而导致传输失败:意外消息类型 0

然后客户端关闭连接失败

未捕获的 DOMException:无法在“WebSocket”上执行“关闭”:代码必须是 1000,或者介于 3000 和 4999 之间。1002 两者都不是。

这里发生了什么; Ratchet 是否支持旧版本的 Web Socket 协议,或者有没有办法让这两个库成功通信?

4

1 回答 1

2

根据GitHub 上的这个问题,这两个库不兼容。

Autobahn 0.9+ 实现了 wampv2,我们必须使用 autobahn 0.8,我也没有在 npm 上找到它。相反,我找到了 wamp1,但我还没有测试过。

于 2018-02-16T14:00:07.183 回答