【问题标题】:Why socket.io returns "Bad handshake method"?为什么 socket.io 返回“错误的握手方法”?
【发布时间】:2021-04-10 15:50:42
【问题描述】:

晚上好, 我正在为套接字连接而苦苦挣扎。 我在 nodejs-express 后端使用 socket.io,在 angular 前端使用 ngx-socket-io,但是在连接时我不断收到 400 stat ({"code":2,"message":"Bad handshake method"})交替使用 200 stat width sid: 0{"sid":"REeYoGC5t_JnTp4dAABp","upgrades":"websocket"],"pingInterval":25000,"pingTimeout":5000})。

[这里是chrome的net tab截图][1]

这里是服务器

const app = express();
const server = http.createServer(app);

server.listen(PORT, () => {
    console.log("Server is listening on " + PORT, colors.yellow);
    init();
});

const io = require("socket.io")(server, {
   cors: {
        origin: ["http://localhost:4200", "https://myurl.com",],
        credentials: true
    }
});

io.on("connection", (socket) => {

    console.log("Connected");

    socket.emit("ok","ok");
    socket.on("disconnect", (data) => {

    });
});

这里有客户端

const config: SocketIoConfig = { 
    url: environment.SERVER_ENDPOINT, 
    options: { autoConnect: false, withCredentials: true}  
};

...
imports: [
    SocketIoModule.forRoot(config)
]
...

有人可以帮我解决这个问题吗? [1]:https://i.stack.imgur.com/72YSB.png

编辑 我已经使用 socket.io-client 而不是 ngx-socket-io 解决了这个问题

【问题讨论】:

  • 您是否 100% 确定您在客户端和服务器上拥有完全相同版本的 socket.io? Bad Handshake 通常是由于版本不匹配造成的。您是直接从服务器加载客户端 socket.io(确保您拥有相同的版本)还是从 CDN 加载它?
  • 我是从 CDN 加载的
  • 那么,您可能没有匹配的版本。您在服务器上运行什么确切的 socket.io 版本?您正在加载的确切 CDN URL 是什么?
  • “socket.io”:服务器上的“^3.0.4”
  • "ngx-socket-io": "^3.2.0",在客户端

标签: node.js angular express socket.io ngx-socket-io


【解决方案1】:

尝试降级版本,socket.io 2.3.1没问题

【讨论】:

    猜你喜欢
    • 2014-07-22
    • 2019-11-17
    • 2012-08-26
    • 1970-01-01
    • 2014-01-14
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多