【发布时间】:2011-08-08 14:28:29
【问题描述】:
我有一个用 C# 编写的客户端服务器应用程序
服务器侦听指定端口。客户端将数据推送到此服务器,其余客户端提取此数据。同样,所有客户端都使用此服务器。
我想知道,对于可靠的数据通信,套接字可以允许的连接数是否有任何上限,就像没有数据丢失一样?传送到服务器然后中继到客户端的数据的典型大小约为 40 kbps。
能否请您帮助我了解设计此类解决方案时应考虑哪些所有参数?
【问题讨论】:
我有一个用 C# 编写的客户端服务器应用程序
服务器侦听指定端口。客户端将数据推送到此服务器,其余客户端提取此数据。同样,所有客户端都使用此服务器。
我想知道,对于可靠的数据通信,套接字可以允许的连接数是否有任何上限,就像没有数据丢失一样?传送到服务器然后中继到客户端的数据的典型大小约为 40 kbps。
能否请您帮助我了解设计此类解决方案时应考虑哪些所有参数?
【问题讨论】:
上行带宽将是您最大的瓶颈。 如果“40 kbps”是指每秒千位而不是每秒千字节,则为 5 KB/s。如果您的上行带宽是每秒 1 兆比特(每秒 128 千字节),那么您只能拥有大约 (128/5) 25 个客户端。
对于一个端口允许多个连接的问题,HTTP 服务器可以毫无问题地做到这一点。
【讨论】:
实际上,一个套接字不会处理服务器中的所有数据。在服务器中,您有一个监听套接字,其唯一目的是接受来自客户端的传入连接。然后每个客户端获得一个连接/套接字。
操作系统将尝试在所有连接的套接字(您的和其他应用程序)之间平均分配带宽。 UDP 套接字的优先级高于 TCP 套接字。
只要网络带宽可以处理,服务器可以处理任意数量的客户端。如果有几个客户端,您可以将线程用于套接字/客户端,而如果您有很多,我建议您阅读异步处理(BeginXX/EndXX 方法)。
如果带宽是个问题,您应该限制发送和接收(最简单的方法是使用 Thread.Sleep)以免阻塞网络连接。
【讨论】: