我正试图使用PhanthomJS(1.9.7)来设置批量测试脚本,以通过我们的Websocket服务器(在Tornado之上实现的RosBridge)驱动我们的机器人软件。
我们使用ROSLIBJS,这是一个使用标准HTML5 WebSocket API与服务器交互的JS库。我更喜欢使用NodeJS而不是PhantomJS,但ROSLIBJS中存在依赖项,需要提供浏览器DOM结构。有人为NodeJS移植了ROSLIBJS。我让它运行,但有一些关键的错误使它无法使用。因此,我需要PhantomJS。
根据此链接,存在与Websocket协议不兼容的问题。意外响应代码426
这是一个已知的问题吗。如果是这样的话,PhantomJS什么时候才能修复?我可以自己轻松地修补PhantomJS吗?
Http 426可能意味着您正在尝试连接不受支持的websocket协议版本。检查响应是否具有http标头"sec-websocket-version"以及支持的版本列表。
您的客户端正在使用哪个版本?
此外,如果您通过代理进行连接,代理可能会从请求中删除"升级"标头,因为它被标记为"连接"标头。切换到WSS://以防止这种情况发生。
有趣的是,我正在考虑为roslibjs编写集成测试,并遇到了这个问题。我会试试phantomjs-2.0(https://github.com/Vitallium/phantomjs-qt5)和真正的铬通过铬驱动器。我最喜欢公关对roslibjs的结果。
另一种选择是编写另一个使用socket.io进行客户端通信的网桥,以实现最大的可移植性。
参见本PR:https://github.com/RobotWebTools/roslibjs/pull/83。它使用chrome来运行测试。或者,您可以通过更改允许rosbridge接受draft76 websockethttps://github.com/RobotWebTools/rosbridge_suite/blob/develop/rosbridge_server/src/tornado/websocket.py#L186返回True;