推荐一个简单易用、轻量级的C#开源WebSocket服务端库,方便我们快速实现WebSocket的开发。

01 项目简介

Fleck 是一个用 C# 编写的轻量级 WebSocket 服务器库。它提供了一个简单而直观的 API,使得开发者可以轻松地在他们的应用程序中集成 WebSocket 功能,比如一些常见的实时通信应用,在线游戏、聊天应用和实时数据更新等场景。

Fleck 的设计目标是易于使用和高性能,同时保持代码的简洁性。

02 项目优缺点

1、优点

简单易用:Fleck 的 API 设计简洁,不需要复杂的配置或继承,使得开发者可以快速上手。

无依赖:Fleck 不依赖于 HttpListener 或 HTTP.sys,这意味着它可以在没有这些组件的系统上运行,如 Windows 7 和 Server 2008。

2、缺点

功能限制:Fleck 专注于简单和轻量,不包含一些高级功能,如复杂的认证机制或详细的统计信息。

03 使用方法

1、一个简单的 WebSocket 服务器的示例

// 创建一个新的 WebSocket 服务器实例,监听在所有网络接口的 8181 端口上。
var server = new WebSocketServer("ws://0.0.0.0:8181"); // 调用 server 实例的 Start 方法启动服务器。
// Start 方法接受一个 lambda 表达式作为参数,该表达式定义了如何处理新的 WebSocket 连接。
server.Start(socket =>
{
// 当 WebSocket 连接打开时,触发 OnOpen 事件,并输出 "Open!" 到控制台。
socket.OnOpen = () => Console.WriteLine("Open!"); // 当 WebSocket 连接关闭时,触发 OnClose 事件,并输出 "Close!" 到控制台。
socket.OnClose = () => Console.WriteLine("Close!"); // 当服务器接收到来自客户端的消息时,触发 OnMessage 事件。
// 这个事件的处理程序接收一个参数 message,它包含了从客户端接收到的消息。
// 然后,使用 socket.Send 方法将接收到的消息发送回客户端。
socket.OnMessage = message => socket.Send(message);
});

2、安全WebSockets (wss://)

// 创建一个新的 WebSocket 服务器实例,监听在所有网络接口的 8431 端口上,并使用 wss 协议,即 WebSocket Secure。
var server = new WebSocketServer("wss://0.0.0.0:8431"); // 为服务器设置一个 X509 证书,这个证书用于建立 TLS/SSL 加密连接。
// "MyCert.pfx" 是证书文件的名称,通常包含证书和私钥。
server.Certificate = new X509Certificate2("MyCert.pfx"); // 调用 server 实例的 Start 方法启动服务器。
server.Start(socket =>
{
//...use as normal
});

3、子协议

// 创建一个新的 WebSocket 服务器实例,监听在所有网络接口的 8181 端口上,并使用 ws 协议,即非加密的 WebSocket。
var server = new WebSocketServer("ws://0.0.0.0:8181"); // 设置服务器支持的子协议列表。子协议允许客户端和服务器之间协商使用特定的通信协议。
// 在这个例子中,服务器声明支持 "superchat" 和 "chat" 两个子协议。
server.SupportedSubProtocols = new []{ "superchat", "chat" }; // 调用 server 实例的 Start 方法启动服务器。
// Start 方法接受一个 lambda 表达式作为参数,该表达式定义了如何处理新的 WebSocket 连接。
server.Start(socket =>
{
//socket.ConnectionInfo.NegotiatedSubProtocol is populated
});

4、自定义日志

ILog logger = LogManager.GetLogger(typeof(FleckLog));

FleckLog.LogAction = (level, message, ex) => {
switch(level) {
case LogLevel.Debug:
logger.Debug(message, ex);
break;
case LogLevel.Error:
logger.Error(message, ex);
break;
case LogLevel.Warn:
logger.Warn(message, ex);
break;
default:
logger.Info(message, ex);
break;
}
};

5、禁用Nagle算法

var server = new WebSocketServer("ws://0.0.0.0:8181");
server.ListenerSocket.NoDelay = true;
server.Start(socket =>
{
//Child connections will not use Nagle's Algorithm
});

6、自动监测错误重新启动

var server = new WebSocketServer("ws://0.0.0.0:8181");
server.RestartAfterListenError = true;
server.Start(socket =>
{
//...use as normal
});

04

支持WebSocket版本

Hixie-Draft-76/Hybi-00(Safari 5,Chrome < 14,Firefox 4)

Hybi-07(Firefox 6)

Hybi-10(Chrome 14-16,Firefox 7)

Hybi-13(Chrome 17+,Firefox 11+,Safari 6+,Edge 13+(?))

05 项目地址

https://github.com/statianzo/Fleck

更多开源项目: https://github.com/bianchenglequ/NetCodeTop

- End -

推荐阅读

2个零基础入门框架教程!

推荐一个Star超过2K的.Net轻量级的CMS开源项目

Pidgin:一个轻量级、快速且灵活的 C# 解析库

Atata:一个基于 Selenium的C#自动化测试Web框架

mongo-csharp-driver:MongoDB官方的C#客户端驱动程序!

Fleck:一个轻量级的C#开源WebSocket服务端库的更多相关文章

  1. 一个轻量级的.Net Core微服务快速开发的轮子

    前言     Adnc是一个轻量级的.Net Core微服务快速开发框架,同时也可以应用于单体架构系统的开发.框架基于JWT认证授权.集成了一系列微服务配套组件,代码简洁.易上手.学习成本低.开箱即用 ...

  2. Adnc如何本地调试 - 一个轻量级的.Net Core微服务开发框架

    前言     Adnc是一个轻量级的.Net Core微服务开发框架,同样适用于单体架构系统的开发.     如果只是想本地调试,只需要安装必备软件,必备软件除开发工具外,其它软件建议大家都使用`do ...

  3. asp.net网站作为websocket服务端的应用该如何写

    最近被websocket的一个问题困扰了很久,有一个需求是在web网站中搭建websocket服务.客户端通过网页与服务器建立连接,然后服务器根据ip给客户端网页发送信息. 其实,这个需求并不难,只是 ...

  4. C# WebSocket 服务端示例代码 + HTML5客户端示例代码

    WebSocket服务端 C#示例代码 using System; using System.Collections.Generic; using System.Linq; using System. ...

  5. WebSocket服务端

    http://blog.csdn.net/qq_20282263/article/details/54310737 C# 实现WebSocket服务端 原创 2017年01月10日 09:22:50 ...

  6. 用nodejs快速实现websocket服务端(带SSL证书生成)

    有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的 ...

  7. nodejs搭建简单的websocket服务端

    创建websocket服务端使用了nodejs-websocket ,首先要安装nodejs-websocket,在项目的目录下: npm install nodejs-websocket 1.搭建w ...

  8. Netty 搭建 WebSocket 服务端

    一.编码器.解码器 ... ... @Autowired private HttpRequestHandler httpRequestHandler; @Autowired private TextW ...

  9. 进程间通信WebSocket 服务端未启动时,客户端重连报错

    当WebSocket服务端未启动时,我们在客户端申请连接,会报 System.Net.Sockets.SocketException 异常. 当然,我们调试时异常设置默认是不勾选这个的.所以不影响正常 ...

  10. VB6+Winsock编写的websocket服务端

    早就写好了,看这方面资料比较少,索性贴出来.只是一个DEMO中的,没有做优化,代码比较草.由于没地方上传附件,所以只把一些主要的代码贴出来. 这只是服务端,不过客户端可以反推出来,其实了解了webso ...

随机推荐

  1. mac M1,M2,M3芯片踩坑 nodejs ruby brew

    问题&解决方法 先说解决方法, 感兴趣的可以了解事情的经过, 也许我描述的问题不专业, 但确实解决了当下的问题, 欢迎留言讨论 这里主要是两个问题, 一个是启用rosetta模式失败, 一个是 ...

  2. 第5天:基础入门-反弹SHELL&不回显带外&正反向连接&防火墙出入站&文件下载

    文件上传下载-解决无图形化&解决数据传输 命令生成:https://forum.ywhack.com/bountytips.php?download 反弹shell 以参照物为准,以Linux ...

  3. ServiceMesh 2:控制面和数据面的职责(图文总结)

    ★ ServiceMesh系列 1 Service Mesh介绍 之前的章节我们详细介绍了ServiceMesh的基础知识. ServiceMesh 是最新一代的微服务架构,作为一个基础设施层,能够与 ...

  4. Python技术书示例代码相关内容

    二维码用微信扫,按提示填写你的邮箱,转到电脑上打开邮箱下载.清华国企网盘,比较快速.安全.放心下载. 百度网盘链接 用Edge/Chrome浏览器下载. <Python自动化运维快速入门> ...

  5. Perfetto分析进阶

    一.Perfetto介绍 Perfetto是Android Q中引入的全新下一代平台级跟踪工具,为Android.Linux和Chrome平台提供了一种通用的性能检测和跟踪分析工具集.其核心是引入了一 ...

  6. /proc/buddyinfo

    在应用程序设计过程中,内存是很重要的资源,而计算机主机的内存资源时有限的.一般而言我们可以申请到的内存是有限的,并不是想申请多大就有多大就可以申请多大的./proc/buddyinfo文件里,就记录着 ...

  7. 玩玩虚拟化-KVM

    1.讲在前面(玩这个的心历路程) 最近一段时间想玩一些集群之类的东西,学习搞一下K8s,集群啥的,但是我没有多台服务器,如果购买云服务器成本太高,后来想到了买台台式机弄点虚拟机来玩,于是我就在某鱼上淘 ...

  8. KubeSphere 社区双周报|07.05-07.18

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  9. 基于 KubeSphere 部署 KubeBlocks 实现数据库自由

    作者:尹珉, KubeSphere Contributor & Ambassador,KubeSphere 社区用户委员会杭州站站长. KubeSphere 是什么? KubeSphere 是 ...

  10. 入门级别 Nginx 常用配置清单

    本文为转发文章,转发来自"https://mp.weixin.qq.com/s/ipUHaFPcDfIM9MsyqDGSEg",觉得不错分享给大家 Nginx 是一个高性能的 HT ...