You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Socket.io服务端与客户端通信异常:无法接收客户端消息

Socket.io 客户端服务端通信失败问题修复

核心错误点

  1. 服务端事件监听对象错误
    在connection回调中,你用全局的io实例监听hello事件,这无法捕获单个客户端发来的消息。正确的做法是使用当前连接的socket实例来监听客户端事件。

  2. 代码依赖缺失+拼写错误

  • 服务端漏了引入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");
});

修复后正常流程

  1. 启动服务端,控制台输出listening on *:3000
  2. 启动客户端,控制台输出conectou
  3. 服务端控制台输出a user connected,并向客户端发送初始化消息
  4. 客户端收到消息后,控制台打印broadcast msg from server,同时向服务端发送hello
  5. 服务端收到hello后,控制台打印mensagem do client,并广播hello事件
  6. 客户端收到广播,控制台打印helloFrom server

内容的提问来源于stack exchange,提问作者Bruno Pimenta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:15:03