一个.NET开源、快速、低延迟的异步套接字服务器和客户端库

前言

最近有不少小伙伴在问:.NET有什么值得推荐的网络通信框架?今天大姚给大家分享一个.NET开源、免费(MIT License)、快速、低延迟的异步套接字服务器和客户端库:NetCoreServer。

项目介绍

NetCoreServer是一个.NET开源、免费(MIT License)、快速、低延迟的异步套接字服务器和客户端库。它支持多种协议,包括 TCP、SSL、UDP、Unix Domain Socket、HTTP、HTTPS 和 WebSocket,并且能够处理高达10K并发连接。通过提供对多种协议的支持和优化的网络 I/O 操作,它使开发人员能够轻松创建响应迅速且可扩展的网络应用程序。

主要特性

  • 跨平台:支持 Linux、MacOS 和 Windows。
  • 异步通信:利用异步编程模式提高性能和响应性。
  • 多协议支持:支持 TCP、SSL、UDP、Unix Domain Socket、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 服务器的实现,支持静态内容服务和自定义请求处理。

使用示例

基准测试

项目源代码

TCP 聊天服务器示例

以下是 TCP 聊天服务器的示例。它处理多个 TCP 客户端会话,并将从任何会话收到的消息多播到所有会话。也可以直接从服务器发送管理消息。

复制代码
`using System;`
`using System.Net;`
`using System.Net.Sockets;`
`using System.Text;`
`using NetCoreServer;`

`namespace TcpChatServer`
`{`
`    class ChatSession : TcpSession`
`    {`
`        public ChatSession(TcpServer server) : base(server) {}`

`        protected override void OnConnected()`
`        {`
`            Console.WriteLine($"Chat TCP session with Id {Id} connected!");`

`            // Send invite message`
`            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);`

`            // Multicast message to all connected sessions`
`            Server.Multicast(message);`

`            // If the buffer starts with '!' the disconnect the current session`
`            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 server port`
`            int port = 1111;`
`            if (args.Length > 0)`
`                port = int.Parse(args[0]);`

`            Console.WriteLine($"TCP server port: {port}");`

`            Console.WriteLine();`

`            // Create a new TCP chat server`
`            var server = new ChatServer(IPAddress.Any, port);`

`            // Start the server`
`            Console.Write("Server starting...");`
`            server.Start();`
`            Console.WriteLine("Done!");`

`            Console.WriteLine("Press Enter to stop the server or '!' to restart the server...");`

`            // Perform text input`
`            for (;;)`
`            {`
`                string line = Console.ReadLine();`
`                if (string.IsNullOrEmpty(line))`
`                    break;`

`                // Restart the server`
`                if (line == "!")`
`                {`
`                    Console.Write("Server restarting...");`
`                    server.Restart();`
`                    Console.WriteLine("Done!");`
`                    continue;`
`                }`

`                // Multicast admin message to all sessions`
`                line = "(admin) " + line;`
`                server.Multicast(line);`
`            }`

`            // Stop the server`
`            Console.Write("Server stopping...");`
`            server.Stop();`
`            Console.WriteLine("Done!");`
`        }`
`    }`
`}`

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看👀,别忘了给项目一个Star支持💖。

优秀项目和框架精选

该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。

相关推荐
追逐时光者1 天前
一套基于 Bootstrap 和 .NET Blazor 的开源企业级组件库
【.net】·【c#】·【开源项目】·【blazor】
追逐时光者3 天前
C#/.NET/.NET Core技术前沿周刊 | 第 37 期(2025年5.1-5.11)
【.net】·【c#】·【.net core】·【技术前沿周刊】
追逐时光者7 天前
在 .NET 中使用 Sqids 快速的为数字 ID 披上神秘短串,轻松隐藏敏感数字!
【.net】·【c#】·【开源项目】·【.net core】
追逐时光者8 天前
C#/.NET/.NET Core优秀项目和框架2025年4月简报
【.net】·【c#】·【.net core】·【每月简报】
追逐时光者9 天前
C# 14 新增功能一览,你觉得实用吗?
【.net】·【c#】·【.net core】·【拾遗补漏】
追逐时光者11 天前
一个包含 80+ C#/.NET 编程技巧实战练习开源项目!
【.net】·【c#】·【开源项目】·【.net core】
追逐时光者14 天前
分享5款开源、美观的 WinForm UI 控件库
【.net】·【c#】·【开源项目】·【winform】
追逐时光者15 天前
一个基于 C# Unity 开发的金庸群侠传 3D 版,直呼牛逼!
【c#】·【开源游戏】
追逐时光者17 天前
EF Core 10 现已支持 LeftJoin 和 RightJoin 运算符查询了!
【.net】·【c#】·【.net core】·【拾遗补漏】·【ef core】