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

Socket.IO回调在C#中无法生效(适配Node.js服务)

解决C#中Socket.IO事件回调问题

推荐使用Socket.IO Client .NET库

首先选用适配性最佳的官方兼容库Socket.IO Client .NET,通过NuGet安装:

Install-Package SocketIOClient

完整代码实现

以下是对应join事件带回调的可运行示例:

using System;
using SocketIOClient;

class SocketIOCallbackDemo
{
    static async System.Threading.Tasks.Task Main(string[] args)
    {
        // 替换为你的Node.js服务端地址
        var socket = new SocketIO("http://your-server-address:port");

        // 建立连接
        await socket.ConnectAsync();

        // 发送join事件并绑定回调处理服务端返回数据
        await socket.EmitAsync("join", "join", response =>
        {
            // 解析服务端返回的ack数据,支持基础类型或自定义实体类
            string ackData = response.GetValue<string>();
            Console.WriteLine($"服务端回调返回: {ackData}");
            // 这里添加你的业务逻辑处理
        });

        // 保持程序运行,避免直接退出
        Console.ReadLine();
        await socket.DisconnectAsync();
    }
}

关键注意事项

  • 版本兼容:确保客户端库版本与服务端Socket.IO版本匹配(比如服务端是v4.x,客户端也要使用4.x系列的SocketIOClient包)
  • 数据解析:response对象通过GetValue<T>方法转换为对应类型,支持字符串、数字、自定义模型等
  • 异步规范:所有Socket操作使用异步方法,避免阻塞主线程导致回调无法触发

关于自定义ID回调的说明

你之前尝试的自定义ID存储回调方案无需手动实现,Socket.IO Client .NET库已内部自动处理ack的ID映射逻辑,直接使用EmitAsync的重载方法传入回调即可。

内容的提问来源于stack exchange,提问作者M. Adil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:52:40