【发布时间】:2013-01-07 20:18:58
【问题描述】:
我正在开发一个 Web 应用程序,它等待 N(例如,大约 5 个)用户通过 TCP 套接字连接到 Web 服务。服务器跟踪连接的套接字数量,一旦达到 N,他就会同时向所有套接字发送一个(单个)文件,比如最大 2MB。这里的重点是时间安排——他们都应该同时接收文件,而不是一个接一个。
作为 c# 和套接字编程的新手,我想知道在这种情况下最好的方法是什么? 我想到了以下几点: 服务器(异步)接收套接字连接,一旦达到 N,循环遍历文件中的所有字节,并且在每次迭代中向每个连接的客户端发送一个 Kbyte(或者可能更少?) - 这在我的意见,是最接近同时发送文件的方法。
我对如何实现这一点有点困惑。 任何帮助都会很棒。 谢谢
编辑: 通过同时接收,我的意思是,从技术上讲,我不希望服务器将文件发送到第一个客户端,然后发送到第二个客户端,然后发送到第三个客户端,等等,而是一次将其发送给所有客户端它在服务器之外,它不在我的手中!假设没有网络问题,并且客户端都非常接近(物理上),他们应该或多或少地同时接收文件。 也许解决方案比我想象的要简单......
【问题讨论】:
-
我认为您正在寻找多播。
-
不,可能不会。多播有严格的基础设施要求,不能在互联网上工作。在公司网络上,除非您使用 ICMP,否则它会淹没网络。我非常喜欢它,但是基于此信息推荐多播是严重的忽视,并且边界对网络一无所知。这可能适用于非多播基础设施(大多数公司和互联网一样)。
-
“他们都应该同时接收文件” - 您正在考虑发送数据块,但您能否详细解释一下您认为“同时接收文件”是什么?也许是一些上下文信息。
-
所以如果其中一个客户端没有收到一些数据,无论是因为速度慢还是因为它是恶意的,你想延迟数据到其他客户端吗?你对客户有控制权吗?他们可以实现确认协议吗? (您关于以小块发送的想法毫无意义,也行不通。它只会让性能变差,因为您将缓慢地填充自己的发送缓冲区并导致分段延迟。)
-
@C.Evenhuis,@David Schwarz,同时接收我的意思是,从技术上讲,我不希望服务器将文件发送到第一个客户端,然后发送到第二个客户端,然后到第三个等等,而是一次发送给他们所有人,一旦它离开服务器,它就不在我的手中!假设没有网络问题,文件应该大致同时到达所有这些!
标签: c# .net sockets filestream