Fleck:一个轻量级的C#开源WebSocket服务端库
推荐一个简单易用、轻量级的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 -
推荐阅读
Atata:一个基于 Selenium的C#自动化测试Web框架
mongo-csharp-driver:MongoDB官方的C#客户端驱动程序!
Fleck:一个轻量级的C#开源WebSocket服务端库的更多相关文章
- 一个轻量级的.Net Core微服务快速开发的轮子
前言 Adnc是一个轻量级的.Net Core微服务快速开发框架,同时也可以应用于单体架构系统的开发.框架基于JWT认证授权.集成了一系列微服务配套组件,代码简洁.易上手.学习成本低.开箱即用 ...
- Adnc如何本地调试 - 一个轻量级的.Net Core微服务开发框架
前言 Adnc是一个轻量级的.Net Core微服务开发框架,同样适用于单体架构系统的开发. 如果只是想本地调试,只需要安装必备软件,必备软件除开发工具外,其它软件建议大家都使用`do ...
- asp.net网站作为websocket服务端的应用该如何写
最近被websocket的一个问题困扰了很久,有一个需求是在web网站中搭建websocket服务.客户端通过网页与服务器建立连接,然后服务器根据ip给客户端网页发送信息. 其实,这个需求并不难,只是 ...
- C# WebSocket 服务端示例代码 + HTML5客户端示例代码
WebSocket服务端 C#示例代码 using System; using System.Collections.Generic; using System.Linq; using System. ...
- WebSocket服务端
http://blog.csdn.net/qq_20282263/article/details/54310737 C# 实现WebSocket服务端 原创 2017年01月10日 09:22:50 ...
- 用nodejs快速实现websocket服务端(带SSL证书生成)
有不少公司将nodejs的socket.io作为websocket的解决方案,很遗憾的是socket.io是对websocket的封装,并不支持html5原始的websocket协议,微信小程序使用的 ...
- nodejs搭建简单的websocket服务端
创建websocket服务端使用了nodejs-websocket ,首先要安装nodejs-websocket,在项目的目录下: npm install nodejs-websocket 1.搭建w ...
- Netty 搭建 WebSocket 服务端
一.编码器.解码器 ... ... @Autowired private HttpRequestHandler httpRequestHandler; @Autowired private TextW ...
- 进程间通信WebSocket 服务端未启动时,客户端重连报错
当WebSocket服务端未启动时,我们在客户端申请连接,会报 System.Net.Sockets.SocketException 异常. 当然,我们调试时异常设置默认是不勾选这个的.所以不影响正常 ...
- VB6+Winsock编写的websocket服务端
早就写好了,看这方面资料比较少,索性贴出来.只是一个DEMO中的,没有做优化,代码比较草.由于没地方上传附件,所以只把一些主要的代码贴出来. 这只是服务端,不过客户端可以反推出来,其实了解了webso ...
随机推荐
- 第41天:WEB攻防-ASP应用&HTTP.SYS&短文件&文件解析&Access注入&数据库泄漏
#ASP-中间件-CVE&短文件&解析&写权限 -HTTP.SYS(CVE-2015-1635) 1.漏洞描述 远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) ...
- P9118 [春季测试 2023] 幂次
二诊前愉快的一次测试,关键是还有奶茶喝 第二题,本来直接暴力去重枚举可以的六十分的,但是.......花了30分钟优化剪纸,优化空间后,惨变35分. [春季测试 2023] 幂次 题目描述 小 Ω 在 ...
- 在 macOS上安装 MongoDB 社区版
官网教程 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/ 使用第三方 brew package manager 在 ...
- 14. 迭代器、生成器、模块与包、json模块
1.迭代器 1.1 迭代器介绍 迭代器是用来迭代取值的工具 每一次迭代得到的结果会作为下一次迭代的初始值,单纯的重复并不是迭代 # while循环实现迭代取值 a = [1, 2, 3, 4, 5, ...
- foobar2000 v1.6.14 汉化版(2023.01.12更新)
foobar2000 v1.6.14 汉化版 -----------------------[软件截图]---------------------- -----------------------[软 ...
- linux中安装mysq5.7
linux中安装mysq5.7 一. 安装mysql yum install mariadb-server mariadb 二. 开启mysql service mysqld start 四. 停止m ...
- python中模块的概念以及常用模块
模块的概念:为了减少常用代码重复输入,同时方便多人协作,python中定义了模块一词. 模块是一些函数的集合.在python中可以使用import导入某一模块的单个或者所有功能. python中的模块 ...
- CSP模拟10--总结
今天是我第一次给模拟赛写正规总结--因为今天的题真的受不了了 四道数学题,一点都不拖泥带水的纯血数学题! T1.黑暗型高松灯 shit 本来是一道放在T4防AK的题,结果学长为了 恶心 锻炼一下我们, ...
- Tomcat线程池详解,为什么SpringBoot最大支持200并发?
Q:经典面试题,SpringBoot 应用可以同时并发处理多少请求? A:SpringBoot 应用并发处理请求数主要由两个因素影响,使用的 Servlet容器(默认使用 Tomcat,常用的还有 j ...
- 认识JVM
类加载器 运行时数据区 执行引擎 执行引擎的任务就是将字节码指令解释/编译为对应平台上的本地机器指令 JVM架构图