如何调试WebSocket服务器

12

我试图编写一个Websocket连接的服务器。我仔细阅读了规范(76版,不是75版)。我正在使用Minefield作为浏览器。

当我尝试在浏览器中使用javascript创建WebSocket时:

var ws = new WebSocket("ws://localhost:8766/hoho");

浏览器返回:

"Firefox无法连接到ws://localhost:8766/hoho的服务器。"

我的服务器收到了有效的客户端握手请求,它发送回响应,然后就出问题了。

我已经通过我的服务器运行了所有找到的握手示例,并且在每种情况下都完全匹配给定的响应。我相当有信心返回的字节流是正确的。我不需要帮助调试我的代码,它正在做我想要的事情。我需要帮助调试握手协议的使用,因为当我给minefield一个我认为正确的响应时,它嘲笑我。

我的问题是:我该如何调试这个东西?我可以想到两种可能性。

  1. 有没有办法让minefield告诉我为什么它拒绝我的握手?

  2. 网络上是否有工作的公共WebSocket服务器服务?如果有,我可以代理它,在两个方向上观察字节流,并找出mine的差异所在。

是否有任何人对这些方向或其他想法有任何想法?

感谢任何帮助。


Gimite的Ruby WebSocket后端(http://github.com/gimite/web-socket-ruby)现在似乎支持76草案。你可以试一下? - bobince
我也遇到了一个问题,使用“ws://”时会出现“Firefox无法连接到服务器...”,而使用“http://”时则会出现“指定了无效或非法字符串”的代码:“12”。对于此问题,Chrome给出了更好的错误提示:“WebSocket的URL方案错误”(假设这是相同的问题),但随后又出现了一个荒谬的错误提示:“意外的响应代码:200”(针对“ws://”)。服务器正在生成和发送结果。 - Jason Kleban
我意识到“意外的响应代码:200”实际上对于Google Chrome来说是正确的,它应该是101。而我缺少的头文件是...(http://www.tbray.org/drafts/wsock-00#anchor18) - Jason Kleban
3个回答

2

2
我正在调试类似的情况,我最依赖的工具是netcat,还有一些额外使用openssl。关闭你的websocket服务器并运行nc -l 8766。这样可以记录发送的确切头部信息。重新启动websocket服务器并使用nc 8766粘贴相同的头部信息,查看结果。如果其中包含ssl,请使用openssl s_client -connect localhost:443进行请求。

从那里开始,确保响应完全符合websocket握手协议。例如,我的问题是响应中有Connection: close,这是不好的。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接