2011-12-19 61 views
0

我有一个现有的服务器应用程序,可以跟踪网络上的各种计算机。有时网络最多可以有6000台需要跟踪的计算机。跟踪涉及到只知道计算机已开机。偶尔服务器会将消息发送回客户端,需要处理和处理。C#套接字服务器 - 最大容量和一般问题

我已经尝试过WCF,但它似乎并没有很好地处理大负载(当接近1200-2000范围的客户端时,CPU使用率很高);再加上,在WCF中,我必须使它成为一种“拉”机制,而不是“推”才能将消息发送到客户端(即客户端向服务器请求消息)。我正在考虑切换到低级TCP套接字通信,但我不确定期望什么,这是这个问题的关键。

所以:

1 - 有多少客户端可以我希望能够连接并保持连接到我的服务器? 2 - 假设这个连接主要用于让服务器知道客户端是否仍然在线,并且从服务器发送非常偶然的消息,我是否可以看到很多资源使用(就CPU/RAM/TCP端口/等)在服务器上?

感谢

+0

你的网络是一个LAN还是你在谈论覆盖式网络(通过互联网)? – 2011-12-19 23:31:40

+0

99%的时间将是局域网。这是销售给客户的产品。 – bugfixr 2011-12-19 23:33:10

回答

0

看看this bytes.com question关于允许在什么听起来像一个类似的情况连接的理论最大数量。

,这似乎是最相关的回应是:

The magic setting you're looking for is "MaxUserPort". You can google this, 
then make the appropriate registry change. 

The value is typically set at 5000, and if you want lots and lots of client 
connections then you need to bump the value up. 

这就是说,你可能会从它是否与您的设计充分混合在本地局域网环境中使用UDP通过TCP受益。我没有亲自在C#上执行任何基准测试,但已成功支持超过10,000个C++版本的UDP客户端,并且问题很少(还有一个巨大的盒子)。

+0

我不是两者之间差异的专家,但它看起来像UDP比TCP更“可靠”;即,如果数据包丢失,它不关心。如果我通过TCP使用UDP,我应该期待什么? – bugfixr 2011-12-20 00:16:22

+0

@bugfixr - 当然UDP **可以比TCP更不可靠,但它的开销也少得多,并且不会跟踪您的客户(这可以缓解您在尝试中遇到的部分问题)。在一个小型局域网环境中,我发现UDP非常可靠。除此之外,您应该通过UDP实施应用协议,以确保可靠性。 – 2011-12-20 00:24:19

2

1 - 我希望有多少客户可以连接并保持连接到我的服务器?

5000应该不会有任何问题。

2 - 假设这方面是用来简单地让服务器知道如果客户仍然在线,并从服务器发送一个非常偶然的消息主要级,我会被看到太多的资源使用(在条款CPU/RAM/TCP端口/等)在服务器上?

定义“很多”。打开的TCP连接占用资源。但最大的资源将是您在BeginReceive中使用的byte[]缓冲区。但让我们假设它是32768字节大。总共约163Mb。记忆很便宜,不是吗?

至于CPU使用率,没有。空闲连接不使用任何CPU。

0

你真的需要保持这么多的连接吗?

这不是因为您需要对工作站进行“跟踪”,因此需要建立持久连接。按照您的建议,您可以让客户端连接并轮询一次。其架构上与HTTP有一些相似之处。这样一个网络服务器甚至可以满足你的服务器需求:所有的轮询客户端可以被认为是up,你的服务器可能有话要说,或者它可能没有。只要你保持连接尽可能短,这并不重要。使用这种方法与放松的民意调查结合起来很可能很容易覆盖上述由一台服务器“跟踪”的6000个工作站。

另一种选择可能是考虑一个消息传递基础结构。服务器发出命令到命令队列,并且拾取命令的客户端响应响应队列

我猜UDP可以被认为是实现后者的可能方式。但你必须做更多的工作......

+0

那么你是否建议有6000个开放的tcp连接将成为服务器的负担?比使用WCF更好(顺便说一下,我目前使用的WCF按照你所描述的方式进行,因此他们进行了轮询并因此处于在线状态,但服务器在2000+客户端数量下处理不好)。 – bugfixr 2011-12-20 15:20:17

+0

你还没有真正谈到你的问题的时间维度。正如你所说的,问题始于2000年的客户端门槛。但是我们在说每秒2000个请求,还是2000个持续(开放)连接?后者很容易通过让每个客户端在特定的超时时间连接,轮询和断开来解决。超时时间越长,您可以跟踪的“并发”客户端数量就越高。 – 2011-12-21 08:41:33