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

如何用JavaScript的Socket.IO客户端连接C# Fleck.WebSocketServer?

问题原因及解决方案

核心问题

Fleck是原生WebSocket服务器,仅支持标准RFC 6455协议;但你用的Socket.IO客户端并非原生WebSocket实现——它在标准协议之上封装了专属的握手流程、命名空间、事件分发机制,两者协议不兼容,因此连接时返回空响应。

两种解决思路

思路一:更换为Socket.IO兼容的C#服务器

放弃Fleck,使用支持Socket.IO协议的C#服务器实现,比如官方的Socket.IO Server for .NET(适配.NET 6+)。

示例代码(官方Socket.IO .NET服务器):

using SocketIO;

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

var socketIO = new SocketIO.Server();
app.MapSocketIO(socketIO);

socketIO.OnConnection((socket) =>
{
    Console.WriteLine("Open!");
    socket.OnDisconnect(() => Console.WriteLine("Close!"));
    socket.On("message", (data) => socket.Emit("message", data));
});

app.Run("http://0.0.0.0:8284");

对应的原Socket.IO客户端代码无需修改,即可正常连接。

思路二:客户端改用原生WebSocket API

如果坚持使用Fleck服务器,客户端需替换为浏览器原生WebSocket对象,而非Socket.IO客户端。

修改后的客户端代码:

const socket = new WebSocket('ws://localhost:8284/socket.io');
socket.onopen = () => {
    console.log('Connected to server');
    socket.send('Hello server!');
};
socket.onmessage = (event) => {
    console.log('Received:', event.data);
};
socket.onclose = () => {
    console.log('Disconnected from server');
};

注意:客户端连接地址需与Fleck服务器监听地址完全一致(你的Fleck监听路径是/socket.io,因此客户端要连ws://localhost:8284/socket.io,原Socket.IO客户端的路径配置也存在错误)。

参考方向

  • Fleck官方文档:明确其为原生WebSocket服务器,仅支持标准WebSocket协议
  • Socket.IO官方文档:说明其客户端需要对应协议的Socket.IO服务器支持,无法直接对接原生WebSocket服务

内容的提问来源于stack exchange,提问作者Boomingland Blogger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:03:25