首页 > 其他分享 >一个.NET开源、快速、低延迟的异步套接字服务器和客户端库

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

时间:2024-09-23 19:51:41浏览次数:9  
标签:异步 Console message TCP server WriteLine 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 服务器的实现,支持静态内容服务和自定义请求处理。

使用示例

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

基准测试

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

项目源代码

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

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 one rror(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 one rror(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!");
        }
    }
}

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看

标签:异步,Console,message,TCP,server,WriteLine,NET,接字
From: https://blog.51cto.com/ysgdaydayup/12079512

相关文章

  • AI 大模型计算机科学家群英传:ResNet 残差网络的发明人何凯明
    AI大模型计算机科学家群英传:ResNet残差网络的发明人何凯明关键词:ResNet,残差网络,何凯明,深度学习,计算机视觉,卷积神经网络,CNN,图像识别1.背景介绍1.1问题的由来随着深度学习技术的不断发展,卷积神经网络(ConvolutionalNeuralNetworks,CNN)在计算机视觉领......
  • asp.net core webapi 将两个对象/两个类合并到一起返回给前端
    举例:A,B类publicclassA{publicintid{get;set;}publicstringname{get;set;}publicstringphone{get;set;}}publicclassB{publicintage{get;set;}publicstringsex{get;set;}}publicclassAB{publicAa{get;set;}public......
  • 从0到1搭建权限管理系统系列三 .net8 JWT创建Token并使用Av
    说明该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。说明:OverallAuth2.0是一个简单、易懂、功能强大的权限+可视化流程管理系统。结合上一篇文章使用,味道更佳:从0到1搭建权限管理......
  • 串口环保212设备数据 转profinet IO项目案例
    目录1 案例说明 12 VFBOX网关工作原理 13 测试数采仪的串口数据 24 配置网关采集212设备数据 45 用PROFINETIO协议转发数据 56 案例总结 81 案例说明数采仪通过串口输出环保212的数据,网关通过串口采集数采仪的数据。网关把采集的数据转换成profinetIO从站数据。2 VF......
  • win11安装 .net 3.5
    前言在win11中,控制面板,以及官网下的.net3.5安装包,都无法正常安装.net环境,会显示错误代码:0x800F0950安装办法查了一下网上资料,使用win11镜像提取出对应的文件进行安装,文件下载链接我放这里了:https://wwt.lanzout.com/iXTdo04v3sbiwin+x打开终端管理员:在终端按回车执行:Dism......
  • 从0到1搭建权限管理系统系列三 .net8 JWT创建Token并使用
    说明  该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。   该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。   说明:OverallAuth2.0是一个简单、易懂、功能强大的权限+可视化流程管理系统。结合上一篇文章使用,味道更......
  • 【Kubernetes基础】Helm工具入门与使用
    前言Helm是Kubernetes包管理工具,类似CentOS的yum包管理工具学习Kubernetes,了解如何通过Helm安装跟管理Kubernetes应用很有必要,下面就来介绍Helm的入门使用。一、Helm基本管理1.1检查Helm版本helmversionhelmversion二、配置Helm仓库Helm可以通过添加仓库源来使......
  • 31927 – Application Development with .NET
    Assignment-1Spring20241FacultyofEngineeringandInformationTechnologySchoolofComputerScience31927–ApplicationDevelopmentwith.NET32998-.NETApplicationDevelopmentSPRING2024ASSIGNMENT1–SPECIFICATIONDuedateMonday23September2......
  • 记一次 .NET某上位机视觉程序 卡死分析
    一:背景1.讲故事前段时间有位朋友找到我,说他的窗体程序在客户这边出现了卡死,让我帮忙看下怎么回事?dump也生成了,既然有dump了那就上windbg分析吧。二:WinDbg分析1.为什么会卡死窗体程序的卡死,入口门槛很低,后续往下分析就不一定了,不管怎么说先用!clrstack看下主线程,输出如下:0:00......
  • fastapi-events fastapi 异步事件分发处理扩展
    fastapi-eventsfastapi异步事件分发处理扩展,提供了本地,以及远程消息处理能力,同时包含了一些内置的handler,对于自定义handler也是比较灵活的参考使用app.pyfromfastapiimportFastAPIfromfastapi.requestsimportRequestfromfastapi.responsesimportJSONResponsefrom......