处理数千个连接的最佳方式


  • 我有一支车队(比方说大约5000辆,少一点)。

  • 我们希望这些车辆向我们发送其GPS位置,比方说每5秒发送一次。

  • 因此,作为一条消息,我们只需要一个字符串(它可能是一个带有date, latitude, longitude and vehicleIdJSON对象)。

  • 由于我是一名.Net web开发人员,所以我很少使用TCP连接。

  • 我在网上找到了异步服务器和客户端的例子,所以我写了一个小程序,模拟大约5000辆车每5秒发送一次消息。

  • 目前,服务器崩溃的速度非常快。它似乎停止接收消息。我需要调查为什么今天。。。

  • 我的问题是:我走得好吗?我的意思是,对于5000辆车,我只在一个端口上收听。

  • 如果我监听50个端口,每个端口对应100辆车,我会得到更好的结果吗?

  • 你认为有更好的方法来做我想做的事情吗?

提前谢谢。

首先,5秒是一个很短的时间来获得不是;不会有太大改变。检查您的商业案例是否收到了如此多的数据。你可以摆脱更多断断续续的电话。(我想说,每分钟1次是最低要求,我们过去会进行15分钟的更新)。

对于接收大量简单数据的调用,您可能会发现构建一个对象来处理它,并且通常构建管道需要花费太多时间。您应该对传入的数据进行节流,读取数据包并快速处理,然后再转到下一个数据包。同时处理这些传入流中的许多流的大规模系统可能不是这种情况的最佳解决方案。当然,对每个传入的数据包都有一个对象处理程序,并试图同时处理所有数据包,这会带来灾难。

如果没有更多信息,我就无能为力了——你需要了解资源使用情况,无论是在系统中设置了太多的处理程序,还是在网络或CPU中,并更改架构以将这些领域的影响降至最低。

看看NodeJS,因为从我的角度来看,这完全适合您的用例。有了它,您将能够处理比"标准"同步编程技术多得多的并行请求。

例如,转到http://blog.caustik.com/2012/08/19/node-js-w1m-concurrent-connections/看看能取得什么成就。

请注意,我想您还需要一个数据库来存储数据,而每秒1000次插入也会给许多数据库服务器带来麻烦。您可能想看看Redis或MongoDB之类的东西来进行扩展。

还有一些关于如何使用与您的需求类似的.NET异步功能的示例:http://msdn.microsoft.com/de-de/library/fx6588te(v=vs.110).aspx我个人对它的性能不能说什么。

最新更新