前言

.NET 生态中有哪些值得推荐的网络通信框架?今天,给大家推荐一个非常优秀的开源项目——NetCoreServer。

NetCoreServer 是一款 .NET 开源、免费、快速且低延迟的异步套接字服务器和客户端库。无论是需要搭建高性能的服务端应用,还是开发高效的客户端程序,NetCoreServer 都能提供强大的支持。

项目介绍

NetCoreServer 是一个高性能、跨平台的异步套接字服务器和客户端库。

它支持多种传输协议,包括 TCP、SSL、UDP、HTTP、HTTPS 和 WebSocket,提供了丰富的网络通信功能。

该库的设计初衷是解决高并发和低延迟的网络通信需求,采用了异步通信模型,能够高效处理大量连接和数据传输。

提供了丰富的示例包括 TCP 聊天服务器、SSL 聊天服务器和 UDP 回显服务器等多种应用场景。

项目特性

  • 跨平台:支持 Linux、macOS 和 Windows。
  • 异步通信:利用异步编程模式提高性能和响应性。
  • 多协议支持:支持 TCP、SSL、UDP、HTTP、HTTPS 和 WebSocket 协议。
  • 高性能:专为高性能通信设计,通过减少不必要的内存分配和 CPU 占用,以及优化网络 I/O 操作来提高性能。
  • 详细文档和示例:提供详细的文档和丰富的示例代码,帮助大家快速上手。

项目组件

  • TcpServer/TcpClient:用于处理 TCP 连接。
  • SslServer/SslClient:提供 SSL/TLS 加密的 TCP 连接。
  • UdpServer/UdpClient:支持 UDP 数据报传输。
  • WsServer/WsClient:支持 WebSocket 通信。
  • WssServer/WssClient:支持安全的 WebSocket(WebSocket Secure)通信。
  • UdsServer/UdsClient:支持 Unix Domain Socket 通信(仅限 Unix/Linux 系统)。
  • HttpServer/HttpClient:提供 HTTP 和 HTTPS 服务器的实现,支持静态内容服务和自定义请求处理。

项目环境

  • 操作系统:Linux、macOS、Windows
  • 开发环境:.NET 6.0、7-Zip、CMake、Git、Visual Studio

项目示例

  • TCP 聊天服务器、聊天客户端
  • SSL 聊天服务器、聊天客户端
  • UDP 回显服务器、回显客户端
  • UDP 组播服务器、组播客户端
  • Unix Domain Socket 聊天服务器、聊天客户端
  • 简单协议
  • 简单协议服务器、简单协议客户端
  • HTTP/HTTPS服务器、客户端
  • WebSocket 聊天服务器、聊天客户端
  • WebSocket 安全聊天服务器、安全聊天客户端

性能测试

1、往返测试

  • TCP/SSL/UDP 回显服务器
  • Unix Domain Socket 回显服务器
  • 简单协议服务器
  • WebSocket 回显服务器/安全回显服务器

2、组播测试

  • TCP/SSL/UDP 组播服务器
  • Unix Domain Socket 组播服务器
  • WebSocket 组播服务器/安全组播服务器

3、Web 服务器测试

  • HTTP/HTTPS 跟踪服务器

项目使用

1、TCP 聊天服务器

它处理多个 TCP 客户端会话,并将从任何会话接收到的消息广播到所有会话。另外,还可以直接从服务器发送管理员消息。

namespace TcpChatServer
{
class ChatSession : TcpSession
{
public ChatSession(TcpServer server) : base(server) {} protected override void OnConnected()
{
Console.WriteLine($"Chat TCP session with Id {Id} connected!"); // 发送欢迎消息
string message = "Hello from TCP chat! Please send a message or '!' to disconnect the client!";
SendAsync(message);
} protected override void OnDisconnected()
{
Console.WriteLine($"Chat TCP session with Id {Id} disconnected!");
} protected override void OnReceived(byte[] buffer, long offset, long size)
{
string message = Encoding.UTF8.GetString(buffer, (int)offset, (int)size);
Console.WriteLine("Incoming: " + message); // 向所有已连接的会话广播消息
Server.Multicast(message); // 如果接收到的消息为 '!',则断开当前会话
if (message == "!")
Disconnect();
} protected override void OnError(SocketError error)
{
Console.WriteLine($"Chat TCP session caught an error with code {error}");
}
} class ChatServer : TcpServer
{
public ChatServer(IPAddress address, int port) : base(address, port) {} protected override TcpSession CreateSession() { return new ChatSession(this); } protected override void OnError(SocketError error)
{
Console.WriteLine($"Chat TCP server caught an error with code {error}");
}
} class Program
{
static void Main(string[] args)
{
// TCP 服务器端口
int port = 1111;
if (args.Length > 0)
port = int.Parse(args[0]); Console.WriteLine($"TCP 服务器端口: {port}"); Console.WriteLine(); // 创建一个新的 TCP 聊天服务器
var server = new ChatServer(IPAddress.Any, port); // 启动服务器
Console.Write("服务器启动中...");
server.Start();
Console.WriteLine("完成!"); Console.WriteLine("按 Enter 停止服务器或输入 '!' 重启服务器..."); // 执行文本输入
for (;;)
{
string line = Console.ReadLine();
if (string.IsNullOrEmpty(line))
break; // 重启服务器
if (line == "!")
{
Console.Write("服务器重启中...");
server.Restart();
Console.WriteLine("完成!");
continue;
} // 向所有会话广播管理员消息
line = "(admin) " + line;
server.Multicast(line);
} // 停止服务器
Console.Write("服务器停止中...");
server.Stop();
Console.WriteLine("完成!");
}
}
}

2、TCP 聊天客户端

它连接到 TCP 聊天服务器,允许发送消息到服务器并接收新消息。

namespace TcpChatClient
{
class ChatClient : TcpClient
{
public ChatClient(string address, int port) : base(address, port) {} public void DisconnectAndStop()
{
_stop = true;
DisconnectAsync();
while (IsConnected)
Thread.Yield();
} protected override void OnConnected()
{
Console.WriteLine($"Chat TCP client connected a new session with Id {Id}");
} protected override void OnDisconnected()
{
Console.WriteLine($"Chat TCP client disconnected a session with Id {Id}"); //等待一段时间...
Thread.Sleep(1000); // 尝试再次连接
if (!_stop)
ConnectAsync();
} protected override void OnReceived(byte[] buffer, long offset, long size)
{
Console.WriteLine(Encoding.UTF8.GetString(buffer, (int)offset, (int)size));
} protected override void OnError(SocketError error)
{
Console.WriteLine($"Chat TCP client caught an error with code {error}");
} private bool _stop;
} class Program
{
static void Main(string[] args)
{
// TCP 服务器地址
string address = "127.0.0.1";
if (args.Length > 0)
address = args[0]; // TCP 服务器端口
int port = 1111;
if (args.Length > 1)
port = int.Parse(args[1]); Console.WriteLine($"TCP server address: {address}");
Console.WriteLine($"TCP server port: {port}"); Console.WriteLine(); // 创建一个新的 TCP 聊天客户端
var client = new ChatClient(address, port); // 连接客户端
Console.Write("Client connecting...");
client.ConnectAsync();
Console.WriteLine("Done!"); Console.WriteLine("Press Enter to stop the client or '!' to reconnect the client..."); // 执行文本输入
for (;;)
{
string line = Console.ReadLine();
if (string.IsNullOrEmpty(line))
break; // 断开客户端连接
if (line == "!")
{
Console.Write("Client disconnecting...");
client.DisconnectAsync();
Console.WriteLine("Done!");
continue;
} // 将输入的文本发送到聊天服务器
client.SendAsync(line);
} // 断开客户端连接
Console.Write("Client disconnecting...");
client.DisconnectAndStop();
Console.WriteLine("Done!");
}
}
}

以上只展示的部分示例,更多示例大家可以访问项目地址获取。

项目地址

GitHub:https://github.com/chronoxor/NetCoreServer

在线文档:https://chronoxor.github.io/NetCoreServer

总结

本文只展示部分功能和内容,如果您对项目感兴趣可以访问系统地址获取详细信息和体验。

希望本文能在.NET 网络通信方面为各位提供有益的帮助。期待大家在评论区留言交流,分享您的宝贵经验和建议。

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!

.NET 高性能异步套接字库,支持多协议、跨平台、高并发的更多相关文章

  1. 《连载 | 物联网框架ServerSuperIO教程》- 17.支持实时数据库,高并发保存测点数据。附:3.4 发布与版本更新说明。

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  2. 15套java互联网架构师、高并发、集群、负载均衡、高可用、数据库设计、缓存、性能优化、大型分布式 项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

  3. 如何快速开发一个支持高效、高并发的分布式ID生成器

    ID生成器是指能产生不重复ID服务的程序,在后台开发过程中,尤其是分布式服务.微服务程序开发过程中,经常会用到,例如,为用户的每个请求产生一个唯一ID.为每个消息产生一个ID等等,ID生成器也是进行无 ...

  4. Nginx支持比Apache高并发的原因

    1.先从各自使用的多路复用IO模型说起:  select模型:(apache使用,由于受模块等限制,用的不多)   单个进程能够 监视的文件描述符的数量存在最大限制 select()所维护的 存储大量 ...

  5. Gaea是支持跨平台具有高并发、高性能、高可靠性,并提供异步、多协议、事件驱动的中间层服务框架

    Gaea是支持跨平台具有高并发.高性能.高可靠性,并提供异步.多协议.事件驱动的中间层服务框架 Gaea:58同城开源的中间层服务框架 https://github.com/58code/Gaea 中 ...

  6. Java异步NIO框架Netty实现高性能高并发

    原文地址:http://blog.csdn.net/opengl_es/article/details/40979371?utm_source=tuicool&utm_medium=refer ...

  7. 孙鑫MFC学习笔记16:异步套接字

    16 1.事件对象 2.CreateEvent创建事件对象 3.SetEvent设置事件对象为通知状态 4.ResetEvent设置事件对象为非通知状态 5.InitializeCriticalSec ...

  8. VC基于消息的异步套接字

    用WSAStartup,需要在StdAfx.h头文件中需要声明 #include    #pragma   comment(lib,"WS2_32.lib") 用AfxSocket ...

  9. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  10. 15套java架构师、集群、高可用、高可扩 展、高性能、高并发、性能优化Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

随机推荐

  1. 38k Star!颠覆传统BI,Metabase新一代智能数据分析工具

    Metabase 是一个开源的商业智能(BI)工具,帮助用户轻松地从数据库中提取数据,并将其转化为易于理解的图表和仪表板.与传统的 BI 工具相比,Metabase 不需要用户具备编写 SQL 的能力 ...

  2. OpenPCDet为KITTI数据集生成数据信息出现错误TypeError: load() missing 1 required positional argument: ‘Loader‘的解决方案

    OpenPCDet为KITTI数据集生成数据信息出现错误 TypeError: load() missing 1 required positional argument: 'Loader' 通过查阅 ...

  3. Kubernetes-11:ConfigMap介绍及演示

    ConfigMap存在的意义 ConfigMap 功能在 Kubernetes1.2版本引入,许多应用程序会从配置文件.命令行参数或环境变量中读取配置信息,ConfigMap API 给我们提供了向容 ...

  4. RabbitMQ核心概念以及工作原理【转】

    RabbitMQ核心概念以及工作原理 我们来看看流行的RabbitMQ消息系统以及它是如何让你的系统之间进行解耦的. 英文原文   RabbitMQ 在这篇短文里,我们会介绍什么是RabbitMQ,它 ...

  5. 火山引擎VeDI赋能小城酒店业,助力“流量”向“留量”转化

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群.   今年,"去小城过假期"正悄然流行.根据途牛旅游发布的<2024年上半年度旅游消费报 ...

  6. 通过DashScope API调用将多种模态转换为向量

    本文介绍如何通过模型服务灵积DashScope进行 多模态向量生成 ,并入库至向量检索服务DashVector中进行向量检索. 模型服务灵积DashScope,通过灵活.易用的模型API服务,让各种模 ...

  7. Spring Cloud集成Seata分布式事务-TCC模式

    参考文章 分布式事务实战方案汇总 https://www.cnblogs.com/yizhiamumu/p/16625677.html 分布式事务原理及解决方案案例https://www.cnblog ...

  8. Angular 18+ 高级教程 – 大杂烩

    前言 本篇记入一些 Angular 的小东西. Angular 废弃 API 列表 Docs – Deprecated APIs and features Using Tailwind CSS wit ...

  9. SQL Management studio copy paste result out (string_agg line break)

    refer : https://stackoverflow.com/questions/59283754/string-agg-with-line-break string agg char(10) ...

  10. SpringMVC —— 响应

    响应页面    响应文本数据    响应json数据    响应json集合数据    注解      转换json时使用了类型转换器