如何编写一个TCP服务器,使用c#在任何时候进行并发连接

本文关键字:使用 任何时候 连接 并发 服务器 何编写 TCP 一个 | 更新日期: 2023-09-27 18:28:00

我们在该国有超过50000辆汽车,我们将使用固定在汽车上的gps设备(而非移动设备)跟踪我们的车辆,通过指定服务器的ip和端口,tcp服务器将接收位置。

其中一个主要要求是并发连接,每辆车每分钟都会更新其位置,所以有经验的人可以根据50000辆车编写TCP服务器,告诉我我在任何时候都可以接收多少并发连接(只是一个想法)。我该如何测试它,我的意思是我该如何加载测试我的tcp服务器。

如果您知道任何有帮助的.net库,请指导,我在www.nsoftware.com上看到了IPDaemon,他们正在申请

默认情况下,IPDaemon的每个实例最多可处理1000个同时传入连接(此数量可能会增加到100000或通过使用MaxConnections降低到更低的值配置设置)。

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

感谢

如何编写一个TCP服务器,使用c#在任何时候进行并发连接

并发连接永远不应该高于1500(99.99%)。除了在实际系统上进行负载测试之外,没有真正的方法进行负载测试。这是一道数学题,你可以这样解决它。

你有50000辆汽车每60秒发送一个信号,持续1秒(可能更短,这将导致更少的并发连接)。由于信号的发送是不同步的(我想汽车不是同时发送信号的),所以它们或多或少会被安排成这样,你每秒会得到833个连接,即50k/60。现在假设你"运气不好",2000辆车在同一时间(或正好相隔60秒)打开,那么在这些车打开的时候,你会得到2000个同时连接,这是极不可能的。正如我所说,你可以将1500个并发连接作为你的最大值,但为了真正节省开支,将其增加到3000或4000,这是不应该发生的。

这一切都是考虑到计算机将花费1秒来解析一个信号,而事实上,这一时间应该接近0.1秒甚至更低,这将导致并发连接减少10倍,所以我对绝对最大并发连接的真实猜测是大约500。

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

我建议你不要重新发明轮子或使用任何过于复杂的东西。一个简单的ASP.NET MVC应用程序就可以做到这一点。

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

这样,应用程序内部只会使用少数线程池线程,因此可以更好地扩展。您可能有50000个对BeginRead()的调用,但如果目前只有10个连接实际接收数据,那么您将有多达10个线程处理它们(仅举一个示例)。

我不知道它能扩大到什么程度。。。每分钟更新一次听起来并不是特别重,但你必须测试它,看看它是否能承受负载。

有关如何用C#编写异步套接字服务器的示例,请参阅此或此。

如果.Net不是一个硬性要求,我建议您查看NodeJs。它非常轻量级,而且正在得到很好的开发。

正如Falanwe所说,如果他们发送的只是位置数据,那么每分钟50000个连接就不算多了。这基本上受到带宽的限制。电脑上的服务不多。

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

此外:你将如何管理,你将如何处理你收集的所有数据?您需要创建智能通知和数据过滤器,以提取管理车队所需的数据。

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

相关文章: