我面臨以下挑戰(zhàn)。我嘗試通過 websocket 訂閱“newPendingTransactions”。我可以成功連接到 websocket。連接后,我希望有新的傳入待處理事務(wù)流,我可以讀出這些事務(wù)并將其傳播到某個(gè)通道 (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}...遺憾的是我沒有收到任何消息(待處理的 tx).. 只有一條關(guān)于關(guān)閉整個(gè)結(jié)構(gòu)的消息。當(dāng)我在控制臺(tái)中直接使用“txpool.status”檢查我的節(jié)點(diǎn)時(shí),我可以看到一直有新的待處理 tx 傳入。他們只是不想傳播到我的 websocket 連接。有人可以幫我嗎?也許我缺少啟動(dòng) geth 節(jié)點(diǎn)本身的參數(shù)?這是我啟動(dòng) geth 節(jié)點(diǎn)的方式: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
1 回答

慕村225694
TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
我發(fā)現(xiàn)我做錯(cuò)了什么:
這與任何被遺忘的 geth 參數(shù)無關(guān),甚至與正確傳播“newPendingTransactions”無關(guān)。
我使用另一個(gè)名為“wscat”的工具測(cè)試了 websocket 連接,并通過控制臺(tái)發(fā)送了必要的 rpc(產(chǎn)生了 tx 哈希流?。?/p>
{"id": 1, "method": "eth_subscribe", "params": ["newPendingTransactions"]}
它告訴我錯(cuò)誤一定是關(guān)于 golang 代碼本身的。
for 循環(huán)中的最后一行
s.Out <- message
正在將消息發(fā)送到無緩沖通道。為了使其工作,其他一些 go 例程必須使用另一端的通道消息。
它還有助于使用這樣的緩沖通道:
s.Out = make(chan Message, 1000)
...所以至少會(huì)發(fā)送 1000 條消息
- 1 回答
- 0 關(guān)注
- 127 瀏覽
添加回答
舉報(bào)
0/150
提交
取消