翼度科技»论坛 编程开发 .net 查看内容

.NET 高性能异步套接字库,支持多协议、跨平台、高并发

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
前言

.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 客户端会话,并将从任何会话接收到的消息广播到所有会话。另外,还可以直接从服务器发送管理员消息。
  1. namespace TcpChatServer
  2. {
  3.     class ChatSession : TcpSession
  4.     {
  5.         public ChatSession(TcpServer server) : base(server) {}
  6.         protected override void OnConnected()
  7.         {
  8.             Console.WriteLine($"Chat TCP session with Id {Id} connected!");
  9.             // 发送欢迎消息
  10.             string message = "Hello from TCP chat! Please send a message or '!' to disconnect the client!";
  11.             SendAsync(message);
  12.         }
  13.         protected override void OnDisconnected()
  14.         {
  15.             Console.WriteLine($"Chat TCP session with Id {Id} disconnected!");
  16.         }
  17.         protected override void OnReceived(byte[] buffer, long offset, long size)
  18.         {
  19.             string message = Encoding.UTF8.GetString(buffer, (int)offset, (int)size);
  20.             Console.WriteLine("Incoming: " + message);
  21.             // 向所有已连接的会话广播消息
  22.             Server.Multicast(message);
  23.             // 如果接收到的消息为 '!',则断开当前会话
  24.             if (message == "!")
  25.                 Disconnect();
  26.         }
  27.         protected override void OnError(SocketError error)
  28.         {
  29.             Console.WriteLine($"Chat TCP session caught an error with code {error}");
  30.         }
  31.     }
  32.     class ChatServer : TcpServer
  33.     {
  34.         public ChatServer(IPAddress address, int port) : base(address, port) {}
  35.         protected override TcpSession CreateSession() { return new ChatSession(this); }
  36.         protected override void OnError(SocketError error)
  37.         {
  38.             Console.WriteLine($"Chat TCP server caught an error with code {error}");
  39.         }
  40.     }
  41.     class Program
  42.     {
  43.         static void Main(string[] args)
  44.         {
  45.             // TCP 服务器端口
  46.             int port = 1111;
  47.             if (args.Length > 0)
  48.                 port = int.Parse(args[0]);
  49.             Console.WriteLine($"TCP 服务器端口: {port}");
  50.             Console.WriteLine();
  51.             // 创建一个新的 TCP 聊天服务器
  52.             var server = new ChatServer(IPAddress.Any, port);
  53.             // 启动服务器
  54.             Console.Write("服务器启动中...");
  55.             server.Start();
  56.             Console.WriteLine("完成!");
  57.             Console.WriteLine("按 Enter 停止服务器或输入 '!' 重启服务器...");
  58.             // 执行文本输入
  59.             for (;;)
  60.             {
  61.                 string line = Console.ReadLine();
  62.                 if (string.IsNullOrEmpty(line))
  63.                     break;
  64.                 // 重启服务器
  65.                 if (line == "!")
  66.                 {
  67.                     Console.Write("服务器重启中...");
  68.                     server.Restart();
  69.                     Console.WriteLine("完成!");
  70.                     continue;
  71.                 }
  72.                 // 向所有会话广播管理员消息
  73.                 line = "(admin) " + line;
  74.                 server.Multicast(line);
  75.             }
  76.             // 停止服务器
  77.             Console.Write("服务器停止中...");
  78.             server.Stop();
  79.             Console.WriteLine("完成!");
  80.         }
  81.     }
  82. }
复制代码
2、TCP 聊天客户端

它连接到 TCP 聊天服务器,允许发送消息到服务器并接收新消息。
  1. namespace TcpChatClient
  2. {
  3.     class ChatClient : TcpClient
  4.     {
  5.         public ChatClient(string address, int port) : base(address, port) {}
  6.         public void DisconnectAndStop()
  7.         {
  8.             _stop = true;
  9.             DisconnectAsync();
  10.             while (IsConnected)
  11.                 Thread.Yield();
  12.         }
  13.         protected override void OnConnected()
  14.         {
  15.             Console.WriteLine($"Chat TCP client connected a new session with Id {Id}");
  16.         }
  17.         protected override void OnDisconnected()
  18.         {
  19.             Console.WriteLine($"Chat TCP client disconnected a session with Id {Id}");
  20.             //等待一段时间...
  21.             Thread.Sleep(1000);
  22.             // 尝试再次连接
  23.             if (!_stop)
  24.                 ConnectAsync();
  25.         }
  26.         protected override void OnReceived(byte[] buffer, long offset, long size)
  27.         {
  28.             Console.WriteLine(Encoding.UTF8.GetString(buffer, (int)offset, (int)size));
  29.         }
  30.         protected override void OnError(SocketError error)
  31.         {
  32.             Console.WriteLine($"Chat TCP client caught an error with code {error}");
  33.         }
  34.         private bool _stop;
  35.     }
  36.     class Program
  37.     {
  38.         static void Main(string[] args)
  39.         {
  40.             // TCP 服务器地址
  41.             string address = "127.0.0.1";
  42.             if (args.Length > 0)
  43.                 address = args[0];
  44.             // TCP 服务器端口
  45.             int port = 1111;
  46.             if (args.Length > 1)
  47.                 port = int.Parse(args[1]);
  48.             Console.WriteLine($"TCP server address: {address}");
  49.             Console.WriteLine($"TCP server port: {port}");
  50.             Console.WriteLine();
  51.             // 创建一个新的 TCP 聊天客户端
  52.             var client = new ChatClient(address, port);
  53.            // 连接客户端
  54.             Console.Write("Client connecting...");
  55.             client.ConnectAsync();
  56.             Console.WriteLine("Done!");
  57.             Console.WriteLine("Press Enter to stop the client or '!' to reconnect the client...");
  58.             // 执行文本输入
  59.             for (;;)
  60.             {
  61.                 string line = Console.ReadLine();
  62.                 if (string.IsNullOrEmpty(line))
  63.                     break;
  64.                 // 断开客户端连接
  65.                 if (line == "!")
  66.                 {
  67.                     Console.Write("Client disconnecting...");
  68.                     client.DisconnectAsync();
  69.                     Console.WriteLine("Done!");
  70.                     continue;
  71.                 }
  72.                 // 将输入的文本发送到聊天服务器
  73.                 client.SendAsync(line);
  74.             }
  75.             // 断开客户端连接
  76.             Console.Write("Client disconnecting...");
  77.             client.DisconnectAndStop();
  78.             Console.WriteLine("Done!");
  79.         }
  80.     }
  81. }
复制代码
以上只展示的部分示例,更多示例大家可以访问项目地址获取。
项目地址

GitHub:https://github.com/chronoxor/NetCoreServer
在线文档:https://chronoxor.github.io/NetCoreServer
总结

本文只展示部分功能和内容,如果您对项目感兴趣可以访问系统地址获取详细信息和体验。
希望本文能在.NET 网络通信方面为各位提供有益的帮助。期待大家在评论区留言交流,分享您的宝贵经验和建议。
最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。
也可以加入微信公众号[DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!优秀是一种习惯,欢迎大家留言学习!


来源:https://www.cnblogs.com/1312mn/p/18521691
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具