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

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

时间:2024-09-22 09:01:47浏览次数:8  
标签:异步 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 服务器的实现,支持静态内容服务和自定义请求处理。

使用示例

基准测试

项目源代码

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

项目源码地址

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

标签:异步,Console,message,TCP,server,WriteLine,NET,接字
From: https://www.cnblogs.com/Can-daydayup/p/18424870

相关文章

  • IIS8.0无法加载asp.net程序的解决方案
    1.更改系统文件machine.config文件,它位于C:\WINNT\Microsoft.NET\下面<configProtectedDatadefaultProvider="RsaProtectedConfigurationProvider">    <providers>      <addname="RsaProtectedConfigurationProvider"type="......
  • Java后端中的请求优化:从请求合并到异步处理的实现策略
    Java后端中的请求优化:从请求合并到异步处理的实现策略大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代微服务架构中,后端系统的性能直接影响到用户体验。为了提升系统的响应速度和吞吐量,请求优化成为了重要的关注点。本文将探讨几种常见的请求优......
  • 【Python爬虫系列】_022.异步文件操作aiofiles
    课程推荐我的个人主页:......
  • 盘点3款.NetCore(C#)开源免费商城系统
    CoreShop商城介绍核心商城系统(CoreShop) 是基于Asp.Net8.0、Uni-App开发、支持可视化布局的小程序商城系统;前后端分离,支持跨平台运行;拥有分销、代理、团购秒杀、接龙、拼团、直播、优惠券、自定义表单等众多营销功能,拥有完整SKU、下单、售后、物流流程,支持可视化自定义首......
  • TikTok提示“Network is out of reach”怎么处理?
    当TikTok提示“Networkisoutofreach”时,意味着应用无法连接到互联网。导致这一问题的常见原因包括网络连接不稳定、地理限制或网络设置与应用不兼容等。解决方法有:拔除手机卡、关闭手机定位服务、切换至稳定的海外IP网络等。使用TikTok专用网络也可以帮助解决连接问题,从而......
  • C#|.net core 基础 - 深拷贝的五大类N种实现方式
    在实际应用中经常会有这样的需求:获取一个与原对象数据相同但是独立于原对象的精准副本,简单来说就是克隆一份,拷贝一份,复制一份和原对象一样的对象,但是两者各种修改不能互相影响。这一行为也叫深克隆,深拷贝。在C#里拷贝对象是一个看似简单实则相当复杂的事情,因此我不建议自己去做......
  • Kubernetes-1. 介绍和安装
    1.Kubernetes介绍下载网址:https://github.com/kubernetes/kubernetes/releases1.1Kubernetes的概述容器编排技术:容器编排系统可以对多个docker主机进行统一的管理和调度,协调容器化应用程序的部署、伸缩、发现和管理。主要的容器编排系统如下DockerSwarm:Docker官方提供......
  • 2、状态检测、Stelnet
    1、路由器、防火墙收到三层数据包1.1、匹配策略路由,如果匹配,按照策略路由执行的路径转发1.2、如果没有匹配策略路由,该流量查询设备路由表执行转发1.3、无路由,丢包在这种情况下,为了保证业务正常,就需要关闭FW的状态检测功能。当关闭状态检测功能后,FW可以通过后续报文建立会......
  • Mobile net V系列详解 理论+实战(3)
    Mobilenet系列论文精讲部分0.摘要1.引文2.引文3.基础概念的讨论3.1深度可分离卷积3.2线性瓶颈3.3个人理解4.模型架构细节5.实验细节6.实验讨论7.总结论文精讲部分鉴于上一小节中采用的代码是V2的模型,因此本章节现对V2模型论文讲解,便于读者能够更好的使......
  • Netty+HTML5+Canvas 网络画画板实时在线画画
    采用Html5的canvas做前端画画板,发送数据到后端Netty服务,实时转发笔迹数据,在线实时同步画笔轨迹,单击绿色小方块,保存画板的图片页面:<!--index.html--><!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>网络画画板</title></head><body&g......