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

Unity项目Socket.IO跨可执行文件socket.On无法接收消息求助

Unity Socket.IO跨可执行文件无法接收Mesh数据的解决方法

核心问题分析

你当前的服务器代码中,使用socket.emit('mesh', data)只会将消息仅回复给发送该消息的客户端。当你运行两个不同的Unity可执行文件时,它们会建立两个独立的Socket连接,所以发送方的消息不会被另一个客户端接收到。

服务器代码修改方案

根据你的需求,将服务器的消息发送逻辑替换为以下方式之一:

方案1:发送给所有连接的客户端(包括发送者)

const express = require('express');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http, {
    maxHttpBufferSize: 10e6 // 增大缓冲区到10MB
});

http.listen(8080, () => {
    console.log('Server listening on port 8080');
});

io.on('connection', (socket) => {
    console.log('a user connected');

    socket.on('mesh', (data) => {
        console.log('Message from client', data);
        // 发送给所有已连接的客户端
        io.emit('mesh', data);
    });

    socket.on('disconnect', () => {
        console.log('user disconnected');
    });
});

方案2:发送给除发送者外的所有客户端

如果不需要让发送者自己收到重复消息,替换成:

socket.broadcast.emit('mesh', data);

方案3:基于房间的定向发送(适合多分组场景)

如果需要将消息发送给特定分组的客户端,可以使用Socket.IO的房间功能:

io.on('connection', (socket) => {
    console.log('a user connected');
    // 客户端连接时自动加入指定房间
    socket.join('mesh-group');

    socket.on('mesh', (data) => {
        console.log('Message from client', data);
        // 发送给房间内所有客户端
        io.to('mesh-group').emit('mesh', data);
    });

    socket.on('disconnect', () => {
        console.log('user disconnected');
    });
});

客户端额外检查项

  • 确认两个可执行文件都成功连接服务器:查看服务器控制台是否打印两次a user connected
  • 匹配Socket.IO版本:确保Unity端的SocketIOUnity插件版本与服务器端socket.io包版本一致(比如均为v4.x),版本不兼容会导致事件无法正常接收
  • 端口权限检查:确保本地防火墙未拦截8080端口,两个可执行文件所在环境能正常访问该端口

内容的提问来源于stack exchange,提问作者Angel Corral

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:23:26