我面臨以下挑戰。我嘗試通過 websocket 訂閱“newPendingTransactions”。我可以成功連接到 websocket。連接后,我會期待一個新傳入的待處理事務流,我可以讀出它并將其傳播到某個通道(chan json.RawMessage)。
...
c, httpResponse, err := websocket.DefaultDialer.Dial(u.String(), req.Header)
...
for {
messageType, message, err := c.ReadMessage()
if err != nil {
log.Println("ERROR:", err)
os.Exit(1)
return
}
_, _ = message, messageType
// s.Out is the outgoing chan json.RawMessage
s.Out <- message
}
...
遺憾的是,我沒有收到任何訊息(待發送).. 只有一個關于關閉整個構造的訊息。當我在控制臺中直接使用“txpool.status”檢查我的節點時,我可以看到一直有新的待處理 txs 傳入。他們只是不想傳播到我的 websocket 連接。有沒有人可以在這里幫助我?也許我缺少啟動 geth 節點本身的引數?
這是我啟動 geth 節點的方式:
geth --http.api eth,web3,debug,txpool,net,shh,db,admin,debug --http --ws --ws.api eth,web3,debug,txpool,net,shh,db,admin,debug --ws.origins localhost --gcmode full --http.port=8545 --maxpeers 120
這是我的“admin.nodeInfo”:
Geth/v1.10.16-stable-20356e57/linux-amd64/go1.17.5
uj5u.com熱心網友回復:
我發現我做錯了什么:
這與任何被遺忘的 geth 引數無關,甚至“newPendingTransactions”被正確傳播。
我使用另一個名為“wscat”的工具測驗了 websocket 連接,并通過控制臺發送了必要的 rpc(導致 tx 哈希流!)
{"id": 1, "method": "eth_subscribe", "params": ["newPendingTransactions"]}
它告訴我錯誤一定是關于 golang 代碼本身的..
for回圈內的最后一行
s.Out <- message
正在將訊息發送到無緩沖通道。為了使其作業,其他一些 go 例程必須使用另一端的通道訊息。
它還有助于使用這樣的緩沖通道:
s.Out = make(chan Message, 1000)
...所以至少會發出 1000 條訊息
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/454482.html
