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
相关产品推荐
相关产品推荐

