记录和调试
Socket.IO 现在完全由 TJ Holowaychuk 开发的名为debug的简约但功能强大的实用程序进行检测。
在 1.0 之前,Socket.IO 服务器默认将所有内容都记录到控制台。事实证明,这对于许多用户来说非常冗长(尽管对其他人非常有用),所以现在我们默认为完全静音。
基本思想是 Socket.IO 使用的每个模块都提供不同的调试范围,让您深入了解内部结构。默认情况下,所有输出都被抑制,您可以通过提供DEBUG
env 变量 (Node.JS) 或localStorage.debug
属性 (Browsers) 来选择查看消息。
例如,您可以在我们的主页上看到它的实际效果:
可用的调试范围
查看可用信息的最佳方法是使用 *
:
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 压缩),这就是为什么它被排除在 slim 包之外(关于各种浏览器包的更多详细信息可以在这里找到)。
如果你使用 webpack,你可以使用webpack-remove-debug删除它:
{
module: {
rules: [
{
test: /\.js$/,
loader: 'webpack-remove-debug'
}
]
}
}
浏览器控制台中的错误日志
请注意错误日志,例如:
net::ERR_INTERNET_DISCONNECTED
net::ERR_CONNECTION_REFUSED
WebSocket is already in CLOSING or CLOSED state
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at xxx. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
The connection to xxx was interrupted while the page was loading
不是由 Socket.IO 库发出的,而是由浏览器本身发出的,因此我们无法控制。