Go-Ethereum使用Mumbai节点遇websocket 503握手失败求助
解决Go-Ethereum订阅Mumbai网络事件时的websocket 503错误
问题原因
wss://rpc-mumbai.matic.today这个公共WebSocket端点大概率已经停止服务或被限流,导致握手失败返回503状态码。
解决方案
1. 替换为可用的Mumbai测试网WSS端点
使用当前维护的公共Mumbai WSS节点,比如:
wss://polygon-mumbai-bor.publicnode.comwss://ws-mumbai.matic.today
修改Go代码中的节点连接部分:
client, err := ethclient.Dial("wss://polygon-mumbai-bor.publicnode.com") if err != nil { log.Fatalf("Failed to connect to node: %v", err) } defer client.Close()
2. 验证端点可用性
用curl命令快速测试WebSocket端点是否正常:
curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Host: polygon-mumbai-bor.publicnode.com" -H "Origin: http://localhost" -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" -H "Sec-WebSocket-Version: 13" https://polygon-mumbai-bor.publicnode.com
如果返回包含101 Switching Protocols的响应,说明端点可用。
3. 切换到付费节点服务(可选)
如果公共节点频繁不稳定,推荐使用Alchemy、Infura等付费节点服务,它们提供更可靠的Mumbai WSS端点,格式类似:
wss://polygon-mumbai.g.alchemy.com/v2/你的API_KEY
注册账号后获取专属端点即可。
4. 确认合约订阅逻辑正确性
替换端点后,确保你的合约事件订阅代码逻辑无误,示例如下(基于你的合约地址):
import ( "log" "github.com/ethereum/go-ethereum/common" "your-project/contracts" // 替换为你的合约包路径 ) func main() { client, err := ethclient.Dial("wss://polygon-mumbai-bor.publicnode.com") if err != nil { log.Fatal(err) } defer client.Close() contractAddr := common.HexToAddress("0x6d66A45b628A7B497B618FA637F77a47Ab1E8943") contract, err := contracts.NewYourContract(contractAddr, client) if err != nil { log.Fatal(err) } // 订阅目标事件(根据你的事件定义调整参数) sub, err := contract.WatchYourEvent(nil, nil) if err != nil { log.Fatal(err) } defer sub.Unsubscribe() // 监听事件流 for event := range sub.Chan() { log.Printf("Received event: %+v", event) } }
内容的提问来源于stack exchange,提问作者Hossein Khoujani
相关产品推荐
相关产品推荐

