go - 连接到 Golang 中的 WebSocket 因握手错误而失败

标签 go websocket socket.io

我正在尝试使用 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!

最佳答案

参见 What Socket.IO is not :

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/

相关文章:

function - 为什么 Golang 允许两个函数在具有不同的接收者类型时具有相同的名称,但在它们具有不同的参数类型时则不允许?

mongodb - 用 Go 编写的程序打开许多与 mongoDB 的连接

android - Websocket 连接不再适用于 Cordova Android 7

javascript - 在 Javascript 客户端中处理不成功的 websocket 升级请求

node.js - Socket.io 在某些机器上无法工作

node.js - 如何使用 Socket.IO 强制限制一个用户的最大连接数?

ios - Socket.io 不会按需关闭套接字(并且不允许我的 swift 应用程序再次重新连接到 node.js 服务器)

go - 如何应用 kubernetes 工作负载

go - 在 goroutine 中使用指针接收器

http - 用于后台处理的 Websockets