我正在構建一個Web服務,它需要查詢1到n個文件服務器,並接收多個文件。有沒有人有這樣做的好主意?線程會做什麼好工作? 如果與某些服務器的連接需要比其他服務器更長的時間,該怎麼辦?我如何知道我是否真的擁有所有查詢的文件?查詢多個服務器
感謝
我正在構建一個Web服務,它需要查詢1到n個文件服務器,並接收多個文件。有沒有人有這樣做的好主意?線程會做什麼好工作? 如果與某些服務器的連接需要比其他服務器更長的時間,該怎麼辦?我如何知道我是否真的擁有所有查詢的文件?查詢多個服務器
感謝
你提的問題是非常通用的,因此將是我的答案,無論如何,我希望這將是有益的。
我會說,你這裏有兩種選擇:
使用異步模式。您打開與N個文件服務器的連接,並設置回調(或事件),只要收到來自一臺服務器的數據就會觸發回調(通常這些回調將在新線程中調用,但請檢查工作框架的文檔)。您從傳遞給回調/事件的數據獲取連接標識符,並更新相應的文件。
使用syncrhonous輪詢模型。您打開到N個文件服務器的連接,並進入一個循環,您可以在其中輪詢每個連接以獲取新數據;當新的數據可用時,您更新相應的文件。所有文件完全下載後退出循環。
根據您如何知道所有文件何時完成,沒有自動的方法。您需要建立一個由您和服務器都知道的約定,以瞭解如何知道文件已完全發送。選項包括:服務器在文件完成時關閉連接(因連接可能意外關閉而不是非常安全),服務器在文件內容之前發送文件大小,文件末尾由特殊字符序列發出信號(這對於文件序列的結尾字節通常不會發生的文本文件更好)。
感謝您的回覆。我正在使用C#/ VS2008。當接收到數據時,您是否有任何現實世界的回調/事件示例? – phm 2009-11-30 10:03:51
查看此答案的示例:http://stackoverflow.com/questions/686618/tcp-client-asynchronous-socket-callback/687662#687662 – Konamiman 2009-11-30 10:15:15