繁体   English   中英

如何随时使用带有并发连接的c#编写TCP Server

[英]How to write a TCP Server, using c# with concurrent connections at any time

我们在该国拥有超过50,000辆车的车队,我们将使用固定在车辆中的gps设备(而非移动设备)来跟踪我们的车辆,tcp服务器会通过指定IP地址和端口来接收该位置服务器。

主要要求之一是并发连接,每辆车每分钟都会更新其位置,因此编写过基于50,000辆车的TCP服务器的经验丰富的人可以告诉我随时可以接收多少个并发连接(只是一个想法) 。 我如何测试它,我的意思是如何对我的tcp服务器进行负载测试。

如果您知道任何有用的.net库,请进行指导,我从www.nsoftware.com看过IPDaemon,他们声称

默认情况下,每个IPDaemon实例最多可以处理1,000个并发传入连接(通过使用MaxConnections配置设置,此数目可以增加到100,000,也可以减少到一个较低的值)。

因此,我感到困惑并感谢经验丰富的同事的建议。

谢谢

如果您唯一需要发送的是职位和一些元数据,请使用简单的HTTP服务器。 市场上有很多这样的公司,而且大多数都非常有效率:管理5万个客户应该不是问题,这不是一个很高的数目。

我建议您不要重新发明轮子或使用任何过于复杂的东西。 一个简单的ASP.NET MVC应用程序应该可以解决问题。

避免为每个连接保留一个线程,而应使用“ 异步编程模型” 这意味着使用像BeginConnect()BeginRead()BeginWrite()以及它们相应的EndXXX方法,而不是使用阻塞替代方法。

这样,应用程序仅在内部使用少量线程池线程,因此可以更好地扩展。 您可能有50,000次对BeginRead()调用,但是如果此时只有10个连接实际上正在接收数据,那么最多将有10个线程处理它们(仅举一个例子)。

我不知道它可以扩展多远……每分钟的更新听起来并不特别繁琐,但是您必须对其进行测试,以查看它是否能够承受负载。

请参见有关如何编写C#异步套接字服务器实例。

并发连接数绝不能高于1500(99.99%)。 除了在实际系统上进行测试外,没有真正的方法来对其进行负载测试。 这是一个数学问题,您可以这样解决。

您有50000辆汽车每60秒发送一次信号,持续1秒(可能更少,这将导致更少的并发连接)。 由于信号的发送是不同步的(我想是汽车在同一时间都发送信号),所以它们或多或少地排列成这样,这样您每秒将获得833个连接,即50k / 60。 现在,让我们假设您“不幸”,同时打开了2000辆汽车(或相隔60秒),然后在打开这些汽车时将获得2000个并发连接,这极不可能。 正如我说的那样,您可以将1500个并发连接作为最大连接数,但要真正节省下来,请将其增加到3000或4000,这是永远不会发生的。

所有这些都考虑到计算机将花费1秒来解析一个信号,实际上这一次应该接近0.1秒甚至更低,这将导致并发连接减少10倍,因此我对绝对最大并发连接的真实猜测约为500

如果不是.Net的硬性要求,建议您使用NodeJs。它非常轻巧,并且已经相当成熟。

正如Falanwe所说,每分钟50.000个连接并不是很多,如果仅仅是它们正在发送的位置数据。 这基本上受带宽限制。 计算机上没有太多服务。

我认为您最大的挑战不是与GPS跟踪器的TCP连接,而是数据库处理。 保存所有位置数据1年后,您将拥有的数据量很大。 数据库服务器的性能将非常重要。

另外:您将如何管理,以及如何对收集到的数据进行处理? 您将需要创建智能通知和数据过滤器,以提取管理车队所需的数据。

我在设置GPS跟踪服务器和管理车队方面有很多经验。 如果您有任何疑问,请随时与我联系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM