Bitcoind

python-bitcoinrpc的奇怪重新連接問題

  • July 21, 2019

我正在使用<https://github.com/jgarzik/python-bitcoinrpc>來訪問比特幣核心 rpc。我發現了一個非常奇怪的重新連接問題。

from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException

# rpc_user and rpc_password are set in the bitcoin.conf file
1. rpc_connection = AuthServiceProxy("http://%s:%s@127.0.0.1:8332"%(rpc_user, rpc_password))
2. best_block_hash = rpc_connection.getbestblockhash()
3. print(rpc_connection.getblock(best_block_hash))

上述程式碼在 python 互動視窗中執行良好。但是,過了一段時間(例如 10 秒),當我再次執行 line2 時,它會崩潰並顯示以下資訊:

Traceback (most recent call last):
 File "&lt;stdin&gt;", line 1, in &lt;module&gt;
 File "/home/fangjun/.local/lib/python3.5/site-packages/bitcoinrpc/authproxy.py", line 136, in __call__
   'Content-type': 'application/json'})
 File "/usr/lib/python3.5/http/client.py", line 1106, in request
   self._send_request(method, url, body, headers)
 File "/usr/lib/python3.5/http/client.py", line 1151, in _send_request
   self.endheaders(body)
 File "/usr/lib/python3.5/http/client.py", line 1102, in endheaders
   self._send_output(message_body)
 File "/usr/lib/python3.5/http/client.py", line 936, in _send_output
   self.send(message_body)
 File "/usr/lib/python3.5/http/client.py", line 908, in send
   self.sock.sendall(data)
BrokenPipeError: [Errno 32] Broken pipe

如果我通過執行 line1 再次重新連接伺服器,則 line2 執行良好。

看來我需要不時執行 line1 ,但這沒有意義。有人能告訴我原因嗎?謝謝。

RPC 客戶端和 RPC 伺服器都有超時,如果 X 秒沒有收到請求或響應,它們將關閉連接。預設情況下,超時為 30 秒。我相信您遇到了超時,因為您在嘗試發送另一個命令之前等待了一段時間。到那時,一端已超時,因此連接已關閉,從而導致Broken pipe錯誤。

引用自:https://bitcoin.stackexchange.com/questions/89294