意外的响应代码:426与PhanthomJS Websocket客户端/ ROSLIB

时间:2014-04-17 03:10:47

标签: javascript websocket ros

我试图使用PhanthomJS(1.9.7)来设置批量测试脚本,以便通过我们的Websocket服务器(在Tornado上实现的RosBridge)驱动我们的机器人软件。

我们使用ROSLIBJS,它是一个使用标准HTML5 WebSocket API与服务器交互的JS库。我宁愿使用NodeJS而不是PhantomJS,但ROSLIBJS中存在需要浏览器DOM结构可用的依赖项。有人为NodeJS移植了ROSLIBJS。我让它运行,但有一些关键的错误阻止它可用。因此,我需要PhantomJS。

根据此链接,与Websocket协议存在一些不兼容性。 Unexpected response code 426

这是一个已知问题。如果是这样的话,PhantomJS什么时候可以修复它?我可以自己轻松修补PhantomJS吗?

2 个答案:

答案 0 :(得分:1)

Http 426可能意味着您正在尝试使用不受支持的websocket协议版本进行连接。检查响应是否具有http标头" sec-websocket-version"以及支持的版本列表。

您的客户使用哪个版本?

此外,如果您通过代理连接,代理可能会删除"升级"来自请求的标头,因为它被标记为" connection"头。切换到WSS://以防止这种情况。

答案 1 :(得分:0)

有趣的是,我正在考虑为roslibjs编写集成测试并遇到了这个问题。我将通过chromedriver尝试phantomjs-2.0(https://github.com/Vitallium/phantomjs-qt5)和真正的chrome。我最喜欢PR对抗roslibjs的结果。

另一种选择是编写另一个使用socket.io进行客户端通信的桥,以实现最大的可移植性。

见此PR:https://github.com/RobotWebTools/roslibjs/pull/83。它使用chrome来运行测试。或者,您可以通过更改https://github.com/RobotWebTools/rosbridge_suite/blob/develop/rosbridge_server/src/tornado/websocket.py#L186以返回True;

来允许rosbridge接受draft76 websockets