如何使用Socket.io调试Node.js

4
我正在使用Eclipse的Google Chrome Developer Tools插件来调试我的Node.js服务器。这个服务器使用Socket.io来处理Web客户端和服务器之间的websocket连接。问题出现在我在服务器中设置断点并开始逐步执行代码时。由于没有心跳或任何通信,客户端很快就会认为服务器不再存在,因此它会断开连接。与此同时,在我逐步执行代码的同时,我的代码尝试使用socket做一些事情,然后由于socket已经被关闭而死亡。这使得像这样调试变得有些棘手。
那么问题是,我该如何调试具有开放的WebSocket连接的服务器而不关闭连接?我不知道是否有一个好的解决方案,但我想把它放出来,看看是否有人有天才的想法。
4个回答

7

在进行更多研究后,我发现了几个看起来很有希望的项目,分别是“node-inspector”和“node-codein”。然而,“node-inspector”不支持最新版本的node,而“node-codein”存在许多错误。另外,两者都只能在Chrome上使用,并且没有得到维护。因此,我编写了自己的解决方案,称为Node Monkey,它非常简单易用,可以与Firefox或Chrome一起使用。它仅捕获您的Node应用程序中记录在控制台中的内容,并将该输出重定向到浏览器控制台。您可以通过运行以下命令来安装它:

npm install node-monkey

干得好,Justin。期待着试用一下。 - net.uk.sweet

6

尽管听起来有点不好且过时,但在这种情况下(实际上是调试客户端->服务器环境),我会经常使用服务器端的标准输出,就像 console.log()console.debug 一样。

如果您需要调试客户端脚本,您可以采用相同的方法,如果您不想失去服务器连接的话。我真的没有看到除了您基本重新配置socket.IO的心跳超时之外其他的解决办法。


这通常是我的做法,但我卡在了一个情况中,因为我需要检查的数据太多,往控制台输出不现实。它会滚动超出我的控制台缓冲区限制,并且不允许检查深层嵌套的对象。如果我可以以某种方式将调试数据转储到浏览器并使用Firebug或Chrome控制台,那么我就可以按照我需要的方式检查对象。 - Justin Warkentin

2
我知道现在已经过去了很长时间,但我找到了另一个选项,用于快速进行socket.io健全性检查的工具是socket-io-tester。我在这里提到它,因为这个答案是谷歌上的第一个结果,而我需要花费更多的时间来寻找这个工具。

这对测试Socket.IO很有用,但不太适合应用程序调试。如果您正在尝试使用console.log()进行调试,则node-monkey实际上会捕获并将其发送到浏览器控制台以供检查。据我所知,使用socket-io-tester仍然需要手动处理,因为它不是专门为此而构建的。话虽如此,它看起来是一个非常有用的应用程序,我将来可能会使用它,所以感谢分享! - Justin Warkentin

0

你可以遵循socket.io的官方文档

https://socket.io/docs/v3/logging-and-debugging/index.html

在我的情况下,我是在我的 package.json 文件中这样做的。
"scripts": {
 "test": "echo \"Error: no test specified\" && exit 1",
 "start": "DEBUG=engine,socket.io* nodemon src/server.js"},

希望这能对你有所帮助,如果你有任何疑问,请随时向我提问。


我正在运行以下命令: DEBUG=engine,socket.io* node app但是出现了以下错误信息: 'DEBUG' 不是内部或外部命令,也不是可运行的程序或批处理文件。 - Debashis Chowdhury

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