我正在尝试使用 github.com/gorilla/websocket 库连接到 Golang 中的 websocket,但它因握手错误而失败。
Golang 代码:
c, resp, err := websocket.DefaultDialer.Dial(WEBSOCKET_ENDPOINT, nil)
if err != nil {
fmt.Println(resp.Status)
fmt.Println(err)
}
_ = c
输出:
200 OK
websocket: bad handshake
我还尝试使用 socketio 连接到 python 中的同一个套接字并且它有效。
Python代码:
import socketio
sio = socketio.Client()
sio.connect(WEBSOCKET_ENDPOINT, transports = 'websocket')
@sio.event
def connect():
print("I'm connected!")
输出:
I'm connected!
最佳答案
Although Socket.IO indeed uses WebSocket for transport when possible, it adds additional metadata to each packet. That is why a WebSocket client will not be able to successfully connect to a Socket.IO server, and a Socket.IO client will not be able to connect to a plain WebSocket server either.
在 Go 中你使用的是 Gorilla Websockets这是一个标准的 Websocket 客户端。您的 Python 示例似乎正在使用 python-socketio这是 Socket.IO 的实现。
根据上面的引述,两者并不直接兼容。我怀疑您的服务器正在使用 Socket.IO,并且根据上面的引述,“WebSocket 客户端将无法成功连接”。
关于go - 连接到 Golang 中的 WebSocket 因握手错误而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71400664/