LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

打造C#高性能服务器:全栈服务实现之路

freeflydom
2026年4月7日 15:37 本文热度 34

c#高性能服务器源代码,其中包括mvc api服务,http服务,ftp服务,sokect服务,websocket服务,大文件传输服务。 这些服务均抛开iis及第三支持,可写成服务或随软件启动而启动。

在当今的互联网世界,服务器端应用的性能至关重要。今天咱就来聊聊如何用C#打造一个高性能服务器,涵盖MVC API服务、HTTP服务、FTP服务、Socket服务、WebSocket服务以及大文件传输服务,而且还不依赖IIS和第三方支持,能以服务形式或者随软件启动而启动。

MVC API服务

MVC(Model - View - Controller)架构在Web开发中相当流行,对于API服务而言,它能很好地分离业务逻辑、数据和展示层。在C#里,我们可以借助ASP.NET Core来轻松构建MVC API服务。

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace MyMvcApiServer
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        public IConfiguration Configuration { get; }
        // 此方法由运行时调用。使用此方法向容器添加服务。
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }
        // 此方法由运行时调用。使用此方法配置HTTP请求管道。
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }
            app.UseHttpsRedirection();
            app.UseMvc();
        }
    }
}

代码分析:Startup类是ASP.NET Core应用的核心。ConfigureServices方法用于向服务容器添加服务,这里我们添加了MVC服务并设置了兼容性版本。Configure方法则配置了HTTP请求管道,在开发环境下开启了开发者异常页面,生产环境使用HSTS等安全措施,最后启用了MVC来处理请求。

HTTP服务

C#里可以用HttpListener来构建一个简单的HTTP服务。

using System;
using System.Net;
using System.Text;
class HttpServer
{
    private HttpListener _httpListener;
    public HttpServer()
    {
        _httpListener = new HttpListener();
        _httpListener.Prefixes.Add("http://localhost:8080/");
    }
    public void Start()
    {
        _httpListener.Start();
        Console.WriteLine("HTTP server started. Listening on http://localhost:8080/");
        while (true)
        {
            var context = _httpListener.GetContext();
            var response = context.Response;
            var buffer = Encoding.UTF8.GetBytes("Hello, this is a custom HTTP server!");
            response.ContentLength64 = buffer.Length;
            var output = response.OutputStream;
            output.Write(buffer, 0, buffer.Length);
            output.Close();
        }
    }
}

代码分析:首先创建了HttpListener实例并添加了监听前缀。在Start方法中,启动监听后进入一个无限循环,每次获取到HTTP上下文后,构造简单的响应内容并返回给客户端。

FTP服务

构建FTP服务相对复杂一些,不过我们可以借助一些开源库,比如FluentFTP

using FluentFTP;
using System;
class FtpServer
{
    public void Start()
    {
        using (var ftp = new FtpClient("127.0.0.1", "user", "pass"))
        {
            ftp.Connect();
            Console.WriteLine("FTP server connected.");
            // 可以在这里进行上传、下载等操作
            ftp.Disconnect();
        }
    }
}

代码分析:使用FluentFTP库,创建FtpClient实例并连接到指定的FTP服务器地址,认证通过后就可以执行各种FTP操作,这里只是简单示例了连接和断开。

Socket服务

Socket服务是网络编程的基础,C#的System.Net.Sockets命名空间提供了丰富的功能。

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class SocketServer
{
    private const int BufferSize = 1024;
    private TcpListener _tcpListener;
    public SocketServer()
    {
        _tcpListener = new TcpListener(IPAddress.Any, 13000);
    }
    public void Start()
    {
        _tcpListener.Start();
        Console.WriteLine("Socket server started. Listening on port 13000");
        while (true)
        {
            var client = _tcpListener.AcceptTcpClient();
            var stream = client.GetStream();
            var buffer = new byte[BufferSize];
            var bytesRead = stream.Read(buffer, 0, BufferSize);
            var message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
            Console.WriteLine($"Received: {message}");
            var responseMessage = "Message received successfully!";
            var responseBuffer = Encoding.UTF8.GetBytes(responseMessage);
            stream.Write(responseBuffer, 0, responseBuffer.Length);
            client.Close();
        }
    }
}

代码分析:创建TcpListener监听指定端口,当有客户端连接时,接收客户端发送的数据,打印出来后再返回一个确认消息,最后关闭客户端连接。

WebSocket服务

在C#中,可以使用System.Net.WebSockets命名空间来实现WebSocket服务。

using System;
using System.Net;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
class WebSocketServer
{
    private HttpListener _httpListener;
    private CancellationTokenSource _cancellationTokenSource;
    public WebSocketServer()
    {
        _httpListener = new HttpListener();
        _httpListener.Prefixes.Add("http://localhost:8081/");
        _cancellationTokenSource = new CancellationTokenSource();
    }
    public async Task Start()
    {
        _httpListener.Start();
        Console.WriteLine("WebSocket server started. Listening on http://localhost:8081/");
        while (!_cancellationTokenSource.Token.IsCancellationRequested)
        {
            var context = await _httpListener.GetContextAsync();
            if (context.Request.IsWebSocketRequest)
            {
                var webSocketContext = await context.AcceptWebSocketAsync(null);
                var buffer = new byte[1024];
                var receiveResult = await webSocketContext.WebSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
                var message = Encoding.UTF8.GetString(buffer, 0, receiveResult.Count);
                Console.WriteLine($"Received: {message}");
                var responseMessage = "Message received successfully via WebSocket!";
                var responseBuffer = Encoding.UTF8.GetBytes(responseMessage);
                await webSocketContext.WebSocket.SendAsync(new ArraySegment<byte>(responseBuffer), WebSocketMessageType.Text, true, CancellationToken.None);
                webSocketContext.WebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None).Wait();
            }
            else
            {
                context.Response.StatusCode = 400;
                context.Response.Close();
            }
        }
        _httpListener.Close();
    }
}

代码分析:通过HttpListener监听HTTP请求,当检测到WebSocket请求时,接受WebSocket连接,接收客户端消息并返回确认消息,最后关闭WebSocket连接。如果不是WebSocket请求则返回400错误。

大文件传输服务

对于大文件传输服务,我们可以在Socket或者HTTP等基础服务上进行优化。以Socket为例,我们可以采用分段读取和写入的方式。

using System;
using System.IO;
using System.Net.Sockets;
class LargeFileTransferServer
{
    private const int BufferSize = 8192;
    private TcpListener _tcpListener;
    public LargeFileTransferServer()
    {
        _tcpListener = new TcpListener(IPAddress.Any, 13001);
    }
    public void Start()
    {
        _tcpListener.Start();
        Console.WriteLine("Large file transfer server started. Listening on port 13001");
        while (true)
        {
            var client = _tcpListener.AcceptTcpClient();
            var stream = client.GetStream();
            using (var fileStream = new FileStream("largeFileToSend.bin", FileMode.Open, FileAccess.Read))
            {
                var buffer = new byte[BufferSize];
                int bytesRead;
                while ((bytesRead = fileStream.Read(buffer, 0, BufferSize)) > 0)
                {
                    stream.Write(buffer, 0, bytesRead);
                }
            }
            client.Close();
        }
    }
}

代码分析:监听指定端口,当客户端连接后,以指定的缓冲区大小从文件中读取数据并通过Socket发送给客户端,直到整个大文件发送完毕。

通过上述各种服务的实现,我们就可以打造一个功能强大的C#高性能服务器,根据实际需求选择和组合这些服务,满足不同的业务场景。无论是Web API接口提供,还是文件传输、实时通信等,都能应对自如。

转自​https://blog.csdn.net/2508_94202947/article/details/156768183


该文章在 2026/4/7 15:37:29 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-1  粤公网安备44030602007207号