C# 中的高性能 TCP 服务器

2024-02-05

我是一名经验丰富的 C# 开发人员,但到目前为止我还没有开发过 TCP 服务器应用程序。现在我必须开发一个高度可扩展的高性能服务器,可以处理至少 5-10,000 个并发连接:通过 GPRS 从 GPS 设备获取原始字节数据。

一个常见的通信流程应该是这样的:

  • GPS 设备启动与我的服务器的连接
  • 如果我想获取数据,我的服务器会回答
  • 设备发送 GPS 数据
  • 我的服务器向设备发送有关获取它的报告(sg,如校验和)
  • 从 GPS、reportm 获取新数据,这种情况一次又一次发生
  • 随后 GPS DEVICE 关闭连接

所以,在我的服务器中我需要

  • 跟踪已连接/活动的客户端
  • 从服务器端关闭任何客户端
  • 当设备关闭连接时捕获事件
  • 获取字节数据
  • 发送数据给客户端

我开始在互联网上阅读有关这个​​主题的内容,但这对我来说似乎是一场噩梦。方法有很多,但我不知道哪个是最好的。

异步套接字方法似乎对我来说是最好的,但是以这种异步风格编写代码很糟糕并且不容易调试。

所以我的问题是:您认为用 C# 实现高性能 TCP 服务器的最佳方法是什么?您知道有什么好的开源组件可以做到这一点吗? (我试了好几个,但没找到好的。)


它必须是异步的,没有办法解决这个问题。高性能和可扩展性不能与每个插槽一个线程相结合。你可以看看StackExchange自己在做什么,看异步 Redis 等待 BookSleeve http://marcgravell.blogspot.com/2011/04/async-redis-await-booksleeve.html它利用了下一个 C# 版本中的 CTP 功能(因此处于边缘并且可能会发生变化,但它很酷)。为了获得更前沿的解决方案,解决方案围绕利用SocketAsyncEventArgs 类 http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx它通过消除与“经典”C# 异步处理相关的异步处理程序的频繁分配,使事情更进一步:

SocketAsyncEventArgs 类是一部分 的一组增强功能 System.Net.Sockets.Socket 类 提供替代异步 可以使用的模式 专用高性能插座 应用程序。这堂课是 专为网络设计 要求高的服务器应用 表现。应用程序可以使用 增强的异步模式 专门或仅在有针对性的热门 区域(例如,当接收 大量数据)。

长话短说:学习异步,否则就死掉……

顺便说一句,如果你问whyasync,然后阅读本文链接的三篇文章:高性能 Windows 程序 http://rusanu.com/2008/11/11/high-performance-windows-programs/。最终的答案是:底层操作系统设计需要它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 中的高性能 TCP 服务器 的相关文章

随机推荐