簡體   English   中英

如何在兩台計算機之間傳遞大量數據

[英]How to pass a lot of data between two computers

有哪些可能的選項將大量數據從一台計算機傳輸到不在同一LAN中的另一台計算機。 壓縮后的數據量約為100Mb,壓縮后的數據量約為2Mb? 另一個要求是,當我為此服務器(使用C#)創建服務器時,Java客戶端應該能夠使用它。

  • WCF是否支持這樣的功能? 但是,如果Java客戶端無法使用它,我將不感興趣。
  • 這里還有什么其他策略?

我將僅使用HTTP或FTP之類的通用名稱,因為將有很多現有的庫可以執行此操作,並且可以保證您不會遇到兼容性問題。 對於那些協議,2MB並不是大量的數據。

這是一個有趣的問題。 這個問題很容易回答。 但是有趣的是,這種問題是新的,以前不存在。 讓我解釋一下,但首先我將回答您的問題:

您應該使用舊式TCP流創建服務器和客戶端。 為了不增加帶寬,您需要以某種方式壓縮流,這里使用您可以找到的最常見的壓縮算法之一(有人說Zip嗎?)。 現在,您有了獨立於語言的協議。 任何語言的客戶都將工作,完成任務。 同樣,為了保持跨平台,請不要選擇最佳的壓縮方式,而應選擇最常用的壓縮方式(這樣就足夠了)。

現在,為什么這類問題很有趣,它們在很大程度上展示了有關OOP的一些知識。 人們理解並使用龐大的框架,並詢問該框架是否可以為他們執行此或那個簡單的任務。 在這里,我們失去了根源,失去了事物的內部運作,它不是用錘子而是用核導彈擊中了釘子。 它超出了目標,將產生大量的應用程序,具有巨大的覆蓋范圍,並且性能通常很差。

我認為,自從完全采用OOP以來,這個問題的數量就增加了。 就像新程序員只想學習這些新的大型框架,並且該框架使世界的視野變暗了。 大型框架絕對沒有錯,它們很棒,但是我認為在掌握基礎知識之前就開始使用它們是錯誤的。 這就像使用NASA航天飛機而不是學校版本的塞斯納私人飛機學習飛行一樣。

在C#中,您可以將對象序列化為XML並進行傳輸,另一方面,可以將XML反序列化為對象。

在文件大小方面,您可以以壓縮或7z ...格式傳輸,並在客戶端上將其解壓縮后再解析xml。

WCF支持SOAP,並包括針對XHTTP的可選JSON序列化。 還有其他機制,但是它們是面向MS的。 您將可以輕松使用創建的服務。 但是,您將不得不考慮如何編碼數據,因為它將以非二進制數據友好方式(XML / JSON)傳遞數據。

您可能希望創建一個簡單的http處理程序,該處理程序可以使用適當的mime標頭等直接以zip格式返回數據。然后,您應該能夠使用Java客戶端訪問該數據。

XMPP是另一種選擇。 您需要另一個服務器,但這可能是一個優勢:客戶端不需要知道服務器的IP地址,服務器和客戶端只需連接到XMPP服務器即可交換消息和文件。

相關鏈接(對於Java):

您沒有提及要發送的數據類型。 為了簡單起見,我假設您有可以轉換為字節數組的數據流。 流的內容必須采用C#和Java都可以理解的格式!

最好的選擇是使用GZip流壓縮數據流。 Java應該支持Gzip。 然后,您可以發送轉換為字節數組的流作為WCF服務操作的響應。 您可以使用默認的文本編碼,它將字節數組轉換為Base64編碼的字符串。 如果您的Java客戶端支持MTOM(這是Java支持的標准),則可以使用使用較小消息的MTOM編碼。

如果您沒有具有眾所周知的內容格式的流,則可以使用某種自定義數據。 對於自定義數據,您必須使用XML的互操作傳輸格式。 使用XML將進一步增加數據的大小。 在這種情況下,您應該考慮將數據傳輸分為幾個調用。 您也可以嘗試將WCF服務托管在IIS 7.x中,並利用其內置功能-動態內容壓縮。 如果您的Java客戶端使用HTTP Accept-Encoding標頭設置為compress調用該服務,則使用gzip它將自動壓縮響應。 請注意,只有.NET 4.0 WCF客戶端可以使用此類服務​​。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM