Socket.io问题:socket.on()无法接收数据,求排查方案
问题解决
核心原因:Socket.io版本不兼容
你客户端使用的是Socket.io 4.5.0,但服务器端安装的Socket.io版本大概率和客户端不匹配——Socket.io不同大版本(如2.x和4.x)的通信协议不兼容,会出现连接成功但事件无法接收的情况。
修复步骤
- 统一Socket.io版本
在项目根目录执行命令,安装与客户端一致的版本:
npm install socket.io@4.5.0
- 规范服务器端代码细节
io.on('connection')的参数应为socket而非data(虽不影响功能,但符合代码规范):
io.on('connection', function(socket) { console.log("客户端已连接"); });
- 可选:优化数据发送时机
如果需要仅在有客户端连接时发送串口数据,可将串口监听逻辑移入connection事件:
io.on('connection', function(socket) { console.log("客户端已连接"); parser.on('data', function(data) { console.log(data); io.emit('data', data); }); });
修正后的完整服务器代码(app.js)
var SerialPort = require("serialport"); var http = require('http'); var fs = require('fs'); var index = fs.readFileSync('index.html'); const parsers = SerialPort.parsers; const parser = new parsers.Readline({ delimiter: '\r\n' }); var port = new SerialPort('COM3', { baudRate: 9600, dataBits: 8, parity: 'none', stopBits: 1, flowControl: false }) port.pipe(parser); var app = http.createServer(function(req, res) { res.writeHead(200, {'Content-Type':'text/html'}); res.end(index); }); var io = require('socket.io').listen(app); io.on('connection', function(socket) { console.log("客户端已连接"); }); parser.on('data', function(data) { console.log(data); io.emit('data', data); }); app.listen(3000);
客户端代码无需修改
你的index.html代码逻辑正常,确保页面加载时Socket.io客户端能正确连接到服务器即可。
内容的提问来源于stack exchange,提问作者Genesis1337
相关产品推荐
相关产品推荐

