Socket.io服务端与客户端通信异常:无法接收客户端消息
Socket.io 客户端服务端通信失败问题修复
核心错误点
服务端事件监听对象错误
在connection回调中,你用全局的io实例监听hello事件,这无法捕获单个客户端发来的消息。正确的做法是使用当前连接的socket实例来监听客户端事件。代码依赖缺失+拼写错误
- 服务端漏了引入
express模块,运行会直接报错 - 客户端漏了引入
socket.io-client模块,io会未定义 - 客户端
readline配置里的utput是拼写错误,应为output
修正后的服务端代码
const express = require('express'); const app = express(); const http = require('http'); const server = http.createServer(app); const { Server } = require("socket.io"); const io = new Server(server); app.get('/', (req, res) => { res.sendFile(__dirname + '/index.html'); }); io.on('connection', (socket) => { console.log('a user connected') // 给当前连接的客户端发送初始化消息 socket.emit('broadcast msg from server') // 监听当前客户端的hello事件 socket.on('hello', () => { console.log('mensagem do client') io.emit('hello'); }); }); server.listen(3000, () => { console.log('listening on *:3000'); });
修正后的客户端代码
const io = require('socket.io-client'); const ioClient = io.connect("http://localhost:3000") const readline = require('readline') ioClient.on("connect", () => { console.log('conectou') }); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); ioClient.on("broadcast msg from server", () => { console.log("broadcast msg from server"); ioClient.emit("hello"); }); ioClient.on("hello", () => { console.log("helloFrom server"); });
修复后正常流程
- 启动服务端,控制台输出
listening on *:3000 - 启动客户端,控制台输出
conectou - 服务端控制台输出
a user connected,并向客户端发送初始化消息 - 客户端收到消息后,控制台打印
broadcast msg from server,同时向服务端发送hello - 服务端收到
hello后,控制台打印mensagem do client,并广播hello事件 - 客户端收到广播,控制台打印
helloFrom server
内容的提问来源于stack exchange,提问作者Bruno Pimenta
相关产品推荐
相关产品推荐

