首页 > 编程语言 >Fleck:一个轻量级的C#开源WebSocket服务端库

Fleck:一个轻量级的C#开源WebSocket服务端库

时间:2024-12-27 11:33:39浏览次数:5  
标签:WebSocket socket C# 0.0 server Start 服务器 轻量级

推荐一个简单易用、轻量级的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#客户端驱动程序!

 

2024-12-27 11:23:17【出处】:https://www.cnblogs.com/chingho/p/18609601

=======================================================================================

标签:WebSocket,socket,C#,0.0,server,Start,服务器,轻量级
From: https://www.cnblogs.com/mq0036/p/18635215

相关文章

  • 【linux合集】单机部署clickhouse--ubuntu环境
    clickhouse单机部署--ubuntu部署导入clickhouse密钥操作(ClickHouse(大数据分析DBMS)的软件包由其开发人员使用公钥进行签名,我们需要在我们的系统上使用它。这是因为只有我们的系统才能验证我们得到的软件包,它们来自源代码,因为它们是由其开发人员发布的。并且没有被中间的任何人修......
  • 报名OCP认证考试,送一次免费补考机会,限时活动,名额有限!
    OracleOCP认证全称OracleCertifiedProfessional,是Oracle公司推出的一种中级专业认证,目的是考验Oracl从业人员在数据库管理等方面的专业知识以及实际操作能力,以确保他们能够有效地管理和维护Oracle数据库。 OCP认证在全球范围内具有较高的认可度,在中国也是如此,它是数据库领......
  • anime.js-强大的Javascript动画库插件
    anime.js是一款功能强大的Javascript动画库插件。anime.js可以和CSS3属性,SVG,DOM元素和JS对象一起工作,制作出各种高性能,平滑过渡的动画效果。在线预览  下载               使用方法在页面中引入anime.min.js文件。<scripttype="te......
  • nc命令说明
    nc-zv命令说明目录nc-zv命令说明更多示例总结nc(Netcat)是一种多功能的网络工具,用于读取和写入网络连接。-zv是它的两个常见选项,用于特定的功能。以下是对nc-zv命令的详细说明:命令格式nc-zv[hostnameorIPaddress][portrange]选项解释-z:表示“扫描模式”,也称为......
  • 题解:CF2051B Journey
    CF2051BJourney思路先计算\(a,b,c\)都一定会走的次数,也就是\(n/(a+b+c)\),记结果\(num\),为然后再一个一个枚举:剩下的\(n=0\):答案为\(num\cdot3\)剩下的\(n\lea\):答案为\(num\cdot3+1\)剩下的\(a\ltn\lea+b\):答案为\(num\cdot3+2\)剩下的\(a+b\ltn\):答案为......
  • 如何为运行在 PICO 4 Ultra 设备上的项目设置外部文件读写权限?
    PICO4Ultra系列设备使用的安卓操作系统为Android14。当项目的WritePermission为Externa(SDCard)且AndroidAPILevel大于32时,Unity提供的外部文件读取方式在PICO4Ultra设备上将失效。此问题提供两种解决方法,按实际情况选取。解决方法一此方法更加快捷。......
  • 01-c++对c的扩展(上)
    一、c++概况1.c++编程思想c++的编程思想:面向对象编程、泛型编程。面向对象:将数据和方法封装在一起,形成一个独立的对象,来实现某些特定的功能。C语言是面向过程的编程,是由一个个函数组成的,但函数只封装了功能没封装数据。面向对象则是由一个个对象组成一个完整的项目。......
  • 软件缺少msrdc.dll文件及错误提示问题
    在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包文件不完整造成,原因可能是某些系统防护软件将重要的DLL文件识别为可疑,阻止并放入了隔离单里,还有一些常见的DLL文件缺少是因为系统没有安装齐全的微软运行库,还有部分情况是因为......
  • 软件缺少msrecr40.dll文件及错误提示问题
    在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包文件不完整造成,原因可能是某些系统防护软件将重要的DLL文件识别为可疑,阻止并放入了隔离单里,还有一些常见的DLL文件缺少是因为系统没有安装齐全的微软运行库,还有部分情况是因为......
  • C++真题-2021年南海区C++组真题
    今天我给大家出一套C++真题-2021年南海区C++组真题限时3小时,大家加油!!!题目1:笨鸟先飞题目描述多多是一只小菜鸟,都说笨鸟先飞,多多也想来个菜鸟先飞。于是它从0点出发,一开始的飞行速度为1米/秒,每过一秒多多的飞行速度比上一秒的飞行速度快2米/秒,问n秒后多多飞了......