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

記錄和除錯

Socket.IO 現在完全由 TJ Holowaychuk 所開發的極簡但功能強大的工具 debug 進行編寫。

在 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 縮小且壓縮),這就是它從精簡套件中排除的原因 (有關各種瀏覽器套件的更多詳細資訊,請參閱 此處)。

如果您使用 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 程式庫發出,而是由瀏覽器本身發出,因此我們無法控制。