跳至主要内容
版本:4.x

日志记录和调试

Socket.IO 现在完全由一个极简但功能强大的实用程序进行检测,该实用程序称为 debug,由 TJ Holowaychuk 创建。

在 1.0 之前,Socket.IO 服务器默认将所有内容记录到控制台。这对许多用户来说过于冗长(尽管对其他人来说非常有用),因此现在我们默认情况下完全静默。

基本思想是,Socket.IO 使用的每个模块都提供不同的调试范围,让您深入了解内部机制。默认情况下,所有输出都会被抑制,您可以通过提供 DEBUG 环境变量(Node.JS)或 localStorage.debug 属性(浏览器)来选择查看消息。

例如,您可以在我们的主页上看到它的实际应用

可用的调试范围

查看可用信息的最佳方法是使用 *

DEBUG=* node yourfile.js

或在浏览器中

localStorage.debug = '*';

然后按您感兴趣的范围进行筛选。您可以在 * 前面加上范围,如果有多个范围,则用逗号分隔。例如,要仅查看 Node.js 上 socket.io 客户端的调试语句,请尝试以下操作

DEBUG=socket.io:client* node yourfile.js

要查看引擎和 socket.io 的所有调试消息

DEBUG=engine,socket.io* node yourfile.js

从浏览器捆绑包中删除调试

虽然调试包在开发过程中很有用,但它会给最终捆绑包增加额外的重量(大约 4KB 压缩和 gzip 压缩),这就是为什么它被从精简捆绑包中排除的原因(有关各种浏览器捆绑包的更多详细信息,请参见 此处)。

如果您使用的是 webpack,可以使用 webpack-remove-debug 删除它。

{
module: {
rules: [
{
test: /\.js$/,
loader: 'webpack-remove-debug'
}
]
}
}

浏览器控制台中的错误日志

请注意,错误日志,例如

  • net::ERR_INTERNET_DISCONNECTED
  • net::ERR_CONNECTION_REFUSED
  • WebSocket 已经处于 CLOSING 或 CLOSED 状态
  • 跨源请求被阻止:同源策略不允许读取 xxx 处的远程资源。(原因:缺少 CORS 标头“Access-Control-Allow-Origin”。)。
  • 页面加载时与 xxx 的连接中断

不是由 Socket.IO 库而是由浏览器本身发出,因此不受我们的控制。