gpt4 book ai didi

c# - C# 中的高性能 TCP 服务器

转载 作者:IT王子 更新时间:2023-10-29 03:55:36 26 4
gpt4 key购买 nike

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

一个常见的沟通过程应该是这样的:

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

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

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

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

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

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

最佳答案

它必须是异步的,没有办法解决这个问题。高性能和可伸缩性不与每个套接字一个线程混合。您可以看看 StackExchange 自己在做什么,请参阅 async Redis await BookSleeve它利用了下一个 C# 版本的 CTP 特性(所以处于边缘并且可能会发生变化,但它很酷)。对于更前沿的解决方案,解决方案围绕利用 SocketAsyncEventArgs Class 发展。通过消除与“经典”C# 异步处理相关的异步处理程序的频繁分配,它使事情更进一步:

The SocketAsyncEventArgs class is part of a set of enhancements to the System.Net.Sockets.Socket class that provide an alternative asynchronous pattern that can be used by specialized high-performance socket applications. This class was specifically designed for network server applications that require high performance. An application can use the enhanced asynchronous pattern exclusively or only in targeted hot areas (for example, when receiving large amounts of data).

长话短说:学习异步或死于尝试...

顺便说一句,如果您要问为什么 async,请阅读本文链接的三篇文章:High Performance Windows programs .最终答案是:底层操作系统设计需要它。

关于c# - C# 中的高性能 TCP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6023264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com