Socket.IO客户端向服务端发送数据失败问题排查
问题分析与解决
嘿,我发现你的问题所在啦!服务端无法接收客户端数据的核心原因是事件监听的对象搞错了。
错误原因拆解
在你的server.js里,你在connection事件的回调中,用全局的io对象去监听data事件,但实际上每个客户端连接都会创建一个独立的socket实例,客户端发送的事件是绑定在这个专属实例上的,而不是全局的io对象。另外,你的connection回调函数还漏掉了接收这个关键的socket参数。
修正后的代码
修正后的server.js
var io = require('socket.io').listen(process.env.port||5000); io.on('connection', function (socket) { // 这里要接收socket参数 console.log('client connected'); // 监听当前客户端socket的data事件,而不是全局io的 socket.on('data', function (data) { console.log(`data received is '${data}'`) }) });
client.js(无需修改)
let io = require('socket.io-client'); let socket = io.connect("http://localhost:5000/", { reconnection: false }); socket.on('connect', function() { console.log('Connected to server'); socket.emit('data', 'data is emitted !') });
验证效果
修改后重启服务端和客户端,你就能在服务端控制台看到输出:
client connected data received is 'data is emitted !'
内容的提问来源于stack exchange,提问作者wawa
相关产品推荐
相关产品推荐

