C#中的高性能TCP服务器

C#中的高性能TCP服务器

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

一个通用的沟通过程应该如下所示:

  • GPS设备启动与我的服务器的连接
  • 如果我想要获取数据,我的服务器应答
  • 设备发送GPS数据
  • 我的服务器向设备发送关于获取它的报告(sg像校验和)
  • 从GPS获取新的数据,报告一次又一次
  • 后来的GPS DEVICE关闭连接

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

  • 跟踪连接/活动客户端
  • 从服务器端关闭任何客户端
  • 抓住事件,当设备关闭连接
  • 获取字节数据
  • 向客户发送数据

我开始通过互联网阅读这个话题,但对我来说似乎是一场噩梦。 有很多方法,但我找不到哪个是最好的。

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

所以我的问题是:你认为在C#中实现高性能TCP服务器的最佳方法是什么? 你知道任何好的开源组件吗? (我尝试了几个,但我找不到一个好的)

采纳答案:

它必须是异步的,这是没有办法的。 高性能和可扩展性不与单线程每插槽混合。 你可以看看StackExchange自己在做什么,看到异步Redis等待BookSleeve ,它利用了下一个C#版本的CTP功能(所以在边缘,可能会有变化,但很酷)。 对于更多的流血边缘,解决方案围绕着SocketAsyncEventArgs类的演进,通过消除与“经典”C#异步处理相关联的异步处理程序的频繁分配,这进一步进一步改进:

SocketAsyncEventArgs类是System.Net.Sockets.Socket类的一组增强功能的一部分,它提供了可由专用高性能套接字应用程序使用的替代异步模式。 此类专门为需要高性能的网络服务器应用程序而设计。 应用程序可以专门或仅在目标热区域使用增强型异步模式(例如,在接收大量数据时)。

长篇小说:学习异步或死亡...

BTW,如果你问为什么 async,然后阅读从这篇文章链接的三个文章: 高性能Windows程序 。 最终的答案是:底层的操作系统设计需要它。

参考更多解答:C#中的高性能TCP服务器,转载请保留C#中的高性能TCP服务器

更多:scalable