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

时间:2014-04-10 07:33:51

标签: .net sockets tcp asynchronous

  • 我有车队(假设约5000,少一点)。

  • 我们希望这些车辆向我们发送 GPS 位置,让我们说每5秒钟。

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

  • 由于我是.Net Web开发人员,因此无法使用TCP连接。

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

  • 目前,服务器崩溃很快。它似乎停止接收消息。我今天需要调查一下......

  • 我的问题是:我是好人吗?我的意思是我只能在1个端口上听5000辆车。

  • 如果我听50个端口,每个100个车辆,我会有更好的结果吗?

  • 您认为有更好的方法可以做我想做的事吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

首先,5秒是一个非常短的时间来获得更新,但实际上并没有太大变化。检查您的业务案例是否收到了大量数据。您可以通过更多间歇性呼叫逃脱。 (我说每分钟1分是最低要求,我们过去做15分钟更新)。

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

如果没有更多信息,我无法提供更多信息 - 您需要分析资源使用情况,系统中是否设置了太多处理程序,或网络或CPU,并更改架构以最大限度地减少对这些区域的影响。

答案 1 :(得分:0)

看一下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我个人无法对它的表现发表任何意见。