Go-Ethereum

使用 Web3 WebSocket Provider 連接到 Geth 節點每 2 小時重置一次

  • June 19, 2021

我有一個 Node JS 應用程序,它使用Web3WsProvider連接到 Geth 節點,該應用程序在後台使用W3CWebSocket

該應用程序啟動並連接到節點,並且主要設置為對節點進行只讀呼叫。這工作正常,只是每隔 2 小時,與節點的 WebSocket 連接就會重置,然後應用程序需要重新連接。雖然我已將其配置Web3WsProvider為自動重新連接,但任何連接斷開都是不可取的,因為在此期間,我的應用程序需要擷取一些可能的事件,並且可能會錯過。

我無法在我正在使用的Web3WsProviderW3CWebSocket庫的原始碼中找到任何會導致此連接重置每 2 小時發生一次的內容,因此看起來是 Geth 導致了此連接重置。

有什麼辦法可以避免 Geth 像這樣每 2 小時重置一次 WebSocket 連接嗎?

所以事實證明,這是執行 Geth 節點的 Amazon Managed Blockchain (AMB) 的一個特定問題。這似乎與下面 AWS API Gateway 的 2 小時硬限制“WebSocket API 的連接持續時間”相同。請注意,我已與 AWS 支持工程師確認了這一點。

setTimeout()因此,當遇到與此類似的情況(使用 AMB 或其他提供程序)時,一個簡單的解決方法是在之前、在處理重複事件或ws.onclose()可能錯過的事件之前重新建立新連接。

或者,只需將提供商切換到沒有 2 小時硬限制的提供商,例如 QuikNode,甚至可以執行您自己的私有 Geth 節點。

引用自:https://ethereum.stackexchange.com/questions/101927