英文:
Connecting to a WebSocket in Golang fails with bad handshake
问题
我正在尝试使用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
我还尝试使用Python中的socketio连接到相同的socket,它可以正常工作。
Python代码:
import socketio
sio = socketio.Client()
sio.connect(WEBSOCKET_ENDPOINT, transports='websocket')
@sio.event
def connect():
print("I'm connected!")
输出:
I'm connected!
英文:
I am trying to connect to a websocket in Golang using github.com/gorilla/websocket library but it's failing with a bad handshake.
Golang code :
c, resp, err := websocket.DefaultDialer.Dial(WEBSOCKET_ENDPOINT, nil)
if err != nil {
fmt.Println(resp.Status)
fmt.Println(err)
}
_ = c
Output :
200 OK
websocket: bad handshake
I also tried connecting to the same socket in python using socketio and it works.
Python code:
import socketio
sio = socketio.Client()
sio.connect(WEBSOCKET_ENDPOINT, transports = 'websocket')
@sio.event
def connect():
print("I'm connected!")
Output :
I'm connected!
答案1
得分: 1
请参考Socket.IO 不是什么:
虽然 Socket.IO 在可能的情况下确实使用 WebSocket 进行传输,但它还会向每个数据包添加附加元数据。这就是为什么 WebSocket 客户端无法成功连接到 Socket.IO 服务器,而 Socket.IO 客户端也无法连接到普通的 WebSocket 服务器的原因。
在 Go 中,您正在使用 Gorilla Websockets,这是一个标准的 WebSocket 客户端。您的 Python 示例似乎在使用 python-socketio,它是 Socket.IO 的一个实现。
根据上述引用,这两者不是直接兼容的。我怀疑您的服务器正在使用 Socket.IO,并且根据上述引用,“WebSocket 客户端无法成功连接”。
英文:
>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.
In Go you are using Gorilla Websockets which is a standard Websocket client. Your Python example appears to be using python-socketio which is an implementation of Socket.IO.
As per the above quote the two are not directly compatible. I suspect your server is using Socket.IO and, as per the above quote, "a WebSocket client will not be able to successfully connect".
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论