2009-11-30 89 views
0

我正在构建一个Web服务,它需要查询1到n个文件服务器,并接收多个文件。有没有人有这样做的好主意?线程会做什么好工作? 如果与某些服务器的连接需要比其他服务器更长的时间,该怎么办?我如何知道我是否真的拥有所有查询的文件?查询多个服务器

感谢

回答

1

你提的问题是非常通用的,因此将是我的答案,无论如何,我希望这将是有益的。

我会说,你这里有两种选择:

  1. 使用异步模式。您打开与N个文件服务器的连接,并设置回调(或事件),只要收到来自一台服务器的数据就会触发回调(通常这些回调将在新线程中调用,但请检查工作框架的文档)。您从传递给回调/事件的数据获取连接标识符,并更新相应的文件。

  2. 使用syncrhonous轮询模型。您打开到N个文件服务器的连接,并进入一个循环,您可以在其中轮询每个连接以获取新数据;当新的数据可用时,您更新相应的文件。所有文件完全下载后退出循环。

根据您如何知道所有文件何时完成,没有自动的方法。您需要建立一个由您和服务器都知道的约定,以了解如何知道文件已完全发送。选项包括:服务器在文件完成时关闭连接(因连接可能意外关闭而不是非常安全),服务器在文件内容之前发送文件大小,文件末尾由特殊字符序列发出信号(这对于文件序列的结尾字节通常不会发生的文本文件更好)。

+0

感谢您的回复。我正在使用C#/ VS2008。当接收到数据时,您是否有任何现实世界的回调/事件示例? – phm 2009-11-30 10:03:51

+0

查看此答案的示例:http://stackoverflow.com/questions/686618/tcp-client-asynchronous-socket-callback/687662#687662 – Konamiman 2009-11-30 10:15:15