记录和调试

Socket.IO 现在完全由 TJ Holowaychuk 开发的名为debug的简约但功能强大的实用程序进行检测。

在 1.0 之前,Socket.IO 服务器默认将所有内容都记录到控制台。事实证明,这对于许多用户来说非常冗长(尽管对其他人非常有用),所以现在我们默认为完全静音。

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

例如,您可以在我们的主页上看到它的实际效果:

可用的调试范围

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

  1. DEBUG=* node yourfile.js

或在浏览器中:

  1. localStorage.debug = '*';

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

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

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

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

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

虽然在开发过程中很有用,但调试包给最终包增加了额外的权重(大约 4KB 压缩和 gzip 压缩),这就是为什么它被排除在 slim 包之外(关于各种浏览器包的更多详细信息可以在这里找到)。

如果你使用 webpack,你可以使用webpack-remove-debug删除它:

  1. {
  2. module: {
  3. rules: [
  4. {
  5. test: /\.js$/,
  6. loader: 'webpack-remove-debug'
  7. }
  8. ]
  9. }
  10. }

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

请注意错误日志,例如:

  • 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 库发出的,而是由浏览器本身发出的,因此我们无法控制。