ETJava Beta | Java    注册   登录
  • 搜索:
  • 一个.NET开源、快速、低延迟的异步套接字服务器和客户端库

    发表于      阅读(1)     博客类别:Crawler     转自:https://www.cnblogs.com/Can-daydayup/p/18424870
    如有侵权 请联系我们删除  (页面底部联系我们)  

    前言

    最近有不少小伙伴在问:.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推荐或自荐(让优秀的项目和框架不被埋没)。