【问题标题】:Can't make a simple socket.io work ( even though equivalent Websocket code works )无法使简单的 socket.io 工作(即使等效的 Websocket 代码工作)
【发布时间】:2021-11-25 23:09:59
【问题描述】:

代码来自https://github.com/fireship-io/socketio-minimal-demo/blob/main/server/index.js

仅以下版本 1(Websocket 版本)有效:

wscat -c "ws://localhost:8282"

Connected (press CTRL+C to quit)
> s
< Roger that! s
> f
< Roger that! f

版本 2 和 3(socket.io 版本)返回 socket hang-up

wscat -c "ws://localhost:8282"
error: socket hang up

版本 1:Websocket

// server.js

const WebSocket = require('ws')
const server = new WebSocket.Server({ port: '8282' })

server.on('connection', socket => { 

  socket.on('message', message => {
    console.log(message)
    socket.send(`Roger that! ${message}`);

  });

});

版本二:socket.io+http

// server.js

const http = require('http').createServer();

const io = require('socket.io')(http, {
    cors: { origin: "*" }
});

io.on('connection', (socket) => {
    console.log('a user connected');

    socket.on('message', (message) =>     {
        console.log(message);
        io.emit('message', `${socket.id.substr(0,2)} said ${message}` );   
    });
});

http.listen(8282, () => console.log('listening on http://localhost:8282') );

版本 3:仅限 socket.io

// server.js

const options = { /* ... */ };
const io = require("socket.io")(options);
// const io = require("socket.io");

io.on('connection', (socket) => {
    console.log('a user connected');

    socket.on('message', (message) =>     {
        console.log(message);
        // io.emit('message', `${socket.id.substr(0,2)} said ${message}` );   
    });
});

io.listen(8282);

我使用node server.js 运行后端

我还在 chrome 上使用 Simple Websocket Client 扩展测试了响应,当我在终端中使用 wscat 进行测试时,我得到了相同的行为。

【问题讨论】:

  • 谢谢,它成功了,虽然我必须使用 EIO=4 而不是 EIO=3。在我检查了 socket.io 客户端用于连接服务器的 url+params 后,修复很简单(在 chrome devtools 上可见)。

标签: websocket socket.io


【解决方案1】:

感谢 Mehmet 的提示,我检查了开发工具网络选项卡中的 url+params 并使其正常工作。

wscat -c "ws://localhost:8282/socket.io/?EIO=4&transport=websocket"
Connected (press CTRL+C to quit)
< 0{"sid":"sSYAv_rKLATxmMEGAAAT","upgrades":[],"pingInterval":25000,"pingTimeout":20000}
< 2
Disconnected (code: 1005, reason: "")

如果我只使用socket.io-client js lib进行连接(在html + javascript上),似乎一切都应该已经工作了。

我用命令行wscat的时候,不知道用socket.io的时候url里面应该有参数

在我检查了 socket.io 客户端用于连接服务器的 url+params 后,修复很简单(在 chrome devtools 网络选项卡中可见)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2018-03-27
    • 2013-12-26
    相关资源
    最近更新 更多