news 2026/2/2 19:23:19

C# 高并发高性能socket源代码。 包括tcp客户端和服务器端,udp客户端和服务器端

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C# 高并发高性能socket源代码。 包括tcp客户端和服务器端,udp客户端和服务器端

C# 高并发高性能socket源代码。 包括tcp客户端和服务器端,udp客户端和服务器端。 所有都包括socket流控制。 此代码属于上层代码,主要应用于大批量物联网项目,mes系统及游戏服务器 它用于物联网行业.mes系统以及大型集控设备有非常大的支持。 *并非是初级的几个方法就实现的socket *图片与该商品无关

"当十万台设备同时在线时,咱们的Socket服务端还能稳如老狗吗?"这问题让不少物联网开发者直挠头。今天咱们直接扒开一套实战级的C# Socket内核,看看怎么用代码把TCP/UDP都收拾得服服帖帖。

先看TCP服务端的核心结构:

public class TcpServer { private readonly Socket _listenSocket; private readonly BufferBlock<SocketAsyncEventArgs> _acceptPool; private readonly MemoryPool<byte> _memoryPool = MemoryPool<byte>.Shared; public TcpServer(IPEndPoint endPoint) { _listenSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); _listenSocket.Bind(endPoint); // 预分配Accept用的SAEA对象池 _acceptPool = new BufferBlock<SocketAsyncEventArgs>(); for(int i=0; i<100; i++) // 按需调整池大小 { var saea = new SocketAsyncEventArgs(); saea.Completed += IO_Completed; _acceptPool.Post(saea); } } }

这代码里有几个暗藏玄机的地方:用MemoryPool替代传统byte[],内存分配效率直接翻倍;BufferBlock实现的SAEA对象池,比ConcurrentQueue快30%左右。特别注意Accept操作单独用对象池管理,和IO操作池物理隔离,避免资源竞争。

流控制是门艺术,看看这个数据泵的设计:

private async Task PumpDataAsync(Socket socket, Memory<byte> buffer) { var flowController = new TokenBucket(1000, 500); // 流速控制 var semaphore = new SemaphoreSlim(10); // 背压控制 while (socket.Connected) { await semaphore.WaitAsync(); var read = await socket.ReceiveAsync(buffer, SocketFlags.None); if (read == 0) break; // 动态流速调整 flowController.RequestTokens(read); var delay = flowController.GetWaitTime(); if (delay > TimeSpan.Zero) { await Task.Delay(delay); } semaphore.Release(); } }

用令牌桶算法控制流速,SemaphoreSlim做背压阀,这两个组合拳能把突发流量削峰填谷。注意这里用了异步等待而不是阻塞,CPU占用率直降60%不是梦。

UDP服务端有个坑必须注意:

void StartUdp() { var buffer = _memoryPool.Rent(2048); var receiveSAEA = new SocketAsyncEventArgs(); receiveSAEA.SetBuffer(buffer.Memory); receiveSAEA.RemoteEndPoint = new IPEndPoint(IPAddress.Any, 0); // 关键设置:关闭UDP连接追踪 _udpSocket.IOControl(-1744830452, new byte[] { 0 }, null); // SIO_UDP_CONNRESET if (!_udpSocket.ReceiveFromAsync(receiveSAEA)) { ProcessUdpPacket(receiveSAEA); } }

那个魔数IOControl是解决UDP端口复用时异常关闭的杀手锏。微软官方文档都未必写得这么直白,这是踩过无数坑才总结出来的经验值。

最后看性能优化的大招——批处理模式:

public void BatchSend(List<Socket> clients, ReadOnlyMemory<byte> data) { var batchArgs = new BatchSocketArgs(data); var segment = new ArraySegment<byte>(data.ToArray()); foreach (var client in clients) { if (client.SendAsync(segment)) { batchArgs.PendingCount++; } else { batchArgs.CompletedSync++; } } // 批量等待异步完成 while (batchArgs.PendingCount > 0) { Thread.SpinWait(500); } }

这种批处理模式比单个发送快8倍以上,特别是处理心跳包这类小数据时效果炸裂。但要注意控制批次大小,建议不超过5000个连接/批次,否则GC会教你做人。

这套代码在万兆网卡上实测过,单机TCP长连接能扛住20W+,UDP吞吐跑到9Gbps。不过别光看数字,关键得根据业务特点调整对象池大小和流控参数。下次咱们再聊聊怎么用Span重构缓冲区,性能还能再提升30%。"

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/10 7:44:30

影视爱好者狂欢,NAS一键部署私人影音库

哈喽&#xff0c;艾瑞巴蒂我是生活爱好者。玩NAS 怎么能少得了折腾影视呢&#xff1f;今天给大家带来一款影视项目&#xff1a;E视界&#xff0c;dongguatv的加强版。该播放器将资源聚合&#xff0c;支持搜索播放。需要结合TMDB进行刮削影视的相关信息。先来看下部署后的效果。…

作者头像 李华
网站建设 2026/1/23 4:51:14

为什么有些优质域名只接受中介交易?

在域名交易市场中&#xff0c;很多人会发现一个现象&#xff1a;一些真正优质、价格不低的域名&#xff0c;卖家往往不接受私下交易&#xff0c;而是明确要求通过域名中介完成成交。这并不是“多此一举”&#xff0c;而是长期交易经验下形成的一种更稳妥的选择。 一、高价值域名…

作者头像 李华
网站建设 2026/1/31 11:33:42

懒人必备:阿里通义Z-Image-Turbo WebUI的云端GPU快速搭建指南

懒人必备&#xff1a;阿里通义Z-Image-Turbo WebUI的云端GPU快速搭建指南 如果你和小张一样&#xff0c;需要快速生成AI图像但苦于本地电脑性能不足&#xff0c;阿里通义Z-Image-Turbo WebUI镜像可能是你的救星。这款预装完整环境的镜像专为图像生成任务优化&#xff0c;无需复…

作者头像 李华
网站建设 2026/2/2 17:44:05

告别CUDA地狱:用预配置Docker镜像一键部署Z-Image-Turbo开发环境

告别CUDA地狱&#xff1a;用预配置Docker镜像一键部署Z-Image-Turbo开发环境 如果你正在尝试搭建Z-Image-Turbo开发环境&#xff0c;却深陷CUDA版本冲突、依赖项不兼容的泥潭&#xff0c;这篇文章就是为你准备的。Z-Image-Turbo作为一款高效的文生图模型&#xff0c;对GPU环境…

作者头像 李华
网站建设 2026/1/22 5:58:26

AI绘画生产力革命:基于云端GPU的Z-Image-Turbo高效工作流

AI绘画生产力革命&#xff1a;基于云端GPU的Z-Image-Turbo高效工作流 对于电商设计团队而言&#xff0c;每天需要生成数百张高质量产品场景图是一项艰巨任务。本地渲染速度慢、硬件成本高、商用版权风险等问题常常困扰着团队。本文将介绍如何利用Z-Image-Turbo这一云端GPU加速的…

作者头像 李华
网站建设 2026/1/31 15:46:37

浮标水质监测站:集成化水质数据采集

在需要长期、连续监测水质环境的各类水域&#xff0c;浮标式水质自动监测站提供了一种集成化的解决方案。它将数据采集、存储、传输与管理功能集于一体&#xff0c;构成一套完整的无人值守自动监测系统。该系统通常由水质传感器、数据采集仪、通信单元、供电系统、结构支架和水…

作者头像 李华