Web3js
web3 websocket連接阻止節點程序退出
我有一個創建 web3 websocket 連接的節點 js 程序,如下所示:
web3 = new Web3('ws://localhost:7545')
當程序完成時,它不會退出,而是永遠掛起,沒有控制台輸出。
看看用 and 處理該過程的突出之處
process._getActiveRequests()
,process._getActiveHandles()
我看到了這一點:Socket { connecting: false, _hadError: false, _handle: TCP { reading: true, owner: [Circular], onread: [Function: onread], onconnection: null, writeQueueSize: 0 }, <snip> _peername: { address: '127.0.0.1', family: 'IPv4', port: 7545 }, <snip> }
看起來 web3 正在打開一個套接字,這是有道理的,因為我從未告訴它關閉連接。查看文件和Google搜尋,看起來 web3 對像沒有 close 或 end 方法。
手動關閉socket可以讓程序成功退出:
web3.currentProvider.connection.close()
有人有更優雅或官方認可的解決方案嗎?我覺得很有趣,您必須手動執行此操作,而不是讓對像在程序結束時自行銷毀。
WebSockets 提供客戶端和伺服器之間的持久連接。必須手動關閉此連接,否則庫會嘗試保持連接處於活動狀態。
我覺得很有趣,您必須手動執行此操作,而不是讓對像在程序結束時自行銷毀。
除非所有連接和方法都結束,否則該過程不會結束。Node.js 不會關閉您的連接。
如果您希望您的程序退出或呼叫,您必須關閉您的持久連接
process.exit(0)
。
我在文件中找不到對此的任何引用,但
disconnect()
提供程序上有一個方法,所以這有效:web3.currentProvider.disconnect();