我正在尝试Ratchet PHP 库 http://socketo.me/。特别是,我一直在尝试整合他们的推式整合 http://socketo.me/docs/push演示到 React 应用程序中。
他们的演示参考看似一次性的 autobahn JS 库版本 https://gist.githubusercontent.com/cboden/fcae978cfc016d506639c5241f94e772/raw/e974ce895df527c83b8e010124a034cfcf6c9f4b/autobahn.js,它适用于我的服务器实现(几乎是他们的演示的重复)。
但是,当我尝试使用来自 npm 的高速公路 JS https://www.npmjs.com/package/autobahn一切都融化了。这似乎实现了较新版本的 Web Sockets 协议?
一次性版本的高速公路通行证wamp
为了Sec-WebSocket-Protocol
标头,Ratchet 似乎支持该标头。 npm 版本的高速公路通行证wamp.2.json, wamp.2.msgpack
...
挖掘我发现的 Ratchet 代码this https://github.com/ratchetphp/Ratchet/blob/master/src/Ratchet/WebSocket/WsServerInterface.php
如果堆栈中的任何组件支持 WebSocket 子协议返回
每个都在数组中受支持
所以我实施了Ratchet\WebSocket\WsServerInterface
在我的组件上也是如此
public function getSubProtocols()
{
return ['wamp.2.json', 'wamp.2.msgpack'];
}
现在连接尝试进一步进行,但仍然失败
由于违反协议而导致传输失败:意外消息类型 0
然后客户端关闭连接失败
未捕获的 DOMException:无法在“WebSocket”上执行“关闭”:
代码必须是 1000 或 3000 到 4999 之间。1002 两者都不是。
这里发生了什么; Ratchet 是否支持旧版本的 Web Socket 协议,或者有没有办法让这两个库成功通信?