【发布时间】: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 上可见)。