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

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

时间:2024-12-17 13:55:30浏览次数:3  
标签: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#客户端驱动程序!

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

相关文章

  • 【实用指南】Zabbix服务器性能警告分析与解决方案:Zabbix server: Utilization of icmp
    前言:在监控系统的日常运维中,Zabbix作为一个强大的开源监控工具,帮助我们实时监控网络和应用状态。然而,当Zabbix服务器性能出现警告时,如icmppinger进程利用率过高,这可能会影响监控数据的准确性和及时性。本文将为您提供一个详细的分析和解决方案,帮助您快速定位问题并解决Zabbix服务......
  • Rocky 8 初始化环境变量 shell 脚本
            随着CentOS7在2024年6月30日停止技术服务支持,很多采用CentOS7的操作系统开始选择其它可替代操作系统,目前很多企业考虑使用Rocky操作系统作为CentOS的替代品。    日常在安装数据库和应用时,通常会对操作系统上的防火墙、时间同步进行......
  • 深入聊聊async&Promise
    正文最近在学习JavaScript里的async、await异步,对于其中的Promise状态以及背后的Js引擎实际运行状态不大理解且很感兴趣,因此花了一点时间仔细研究了一下。从Example说起constcreateImg=function(path){returnnewPromise((resolve,reject)=>{constimg=docu......
  • 要在 C# 6.0 中连接 PostgreSQL 数据库
    要在C#6.0中连接PostgreSQL数据库,你可以使用Npgsql库。Npgsql是一个开源的.NET数据提供程序,专门用于与PostgreSQL数据库进行交互。以下是详细步骤和示例代码,帮助你在C#6.0项目中连接和操作PostgreSQL数据库。步骤1:安装Npgsql包首先,你需要在你的C#项......
  • NoHttpResponseException异常分析和优化实践
    NoHttpResponseException异常分析和优化实践在使用HttpClient进行网络请求时,如果服务器端没有响应,可能会抛出NoHttpResponseException异常。该异常表明服务器端没有及时响应,导致客户端无法获取到服务器端的响应。在实际开发中,我们通常会遇到两种情况:服务器端没有正常响应,导致......
  • 使用 Go 语言和 Tesseract 实现验证码识别
    步骤安装TesseractOCR引擎在使用Go编写验证码识别时,仍然需要安装TesseractOCR引擎。你可以通过以下命令在Linux上安装Tesseract:bash更多内容访问ttocr.com或联系1436423940sudoapt-getupdatesudoapt-getinstalltesseract-ocr对于macOS,可以通过Homebrew......
  • 使用 PHP 和 Tesseract 实现验证码识别
    步骤安装TesseractOCR引擎首先,你需要在系统中安装TesseractOCR引擎。你可以通过以下命令在Linux上安装Tesseract:bashsudoapt-getupdatesudoapt-getinstalltesseract-ocr如果你使用的是macOS,可以通过Homebrew安装:bashbrewinstalltesseract安装完成后,可......
  • Spring Framework存在目录遍历漏洞(CVE-2024-38819)
    免责声明:本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在使用本......
  • 切换Docker本地目录
    背景:df-h,发现docker默认的路径在/var/lib下,而且容量即将满掉。对于欧拉系统来说,目录在/home,需要把docker目前的目录切换到/home下。解决方法:1.Docker的版本是1.12或以上的,可以修改或新建daemon.json文件.vim/etc/docker/daemon.json{"graph":"/home/docker......
  • MongoDB|TOMCAT定时切割日志文件的脚本
    MongoDB用过一段时间后,日志较大,需要定时进行日志切割。一、切割bash:splitlogmongo.sh#!/bin/bashlog_dir="/home/mongodb/logs"file_name="/home/mongodb/logs/mongodb.log"if[!-d$log_dir];thenmkdir-p$log_dirfiif[!-f$file_name];thentouch$file_name......