1樓:jack tang
曾做過類似的東東。100M這種量級就P2P神馬的都行吧。我那時候做的是幾十g幾百G的資料同步。
當時發現主要的效能瓶頸是磁碟IO。後來改成序列的結構,就是把所有機器像鍊錶一樣組織起來,每個資料都從前向後發,每個節點收到資料一邊寫入磁碟,一邊傳送給下乙個節點,這樣的速度是很快的。
2樓:柳傾
題目是:「區域網內,如何實現把一台電腦的100MB資料最快速的傳輸到其他50臺電腦?」
我的回答是:「糾刪碼(Erasure codes)和P2P」
詳細的回答:「將檔案F(100MB)編碼為100大小的校驗塊(每個2MB),使得任意50個校驗塊都可以恢復出原始檔案F,然後區域網內50個節點開啟P2P程式,每個節點收到50個校驗塊就可以了。」
最理想的情況,用網路編碼(network coding)可以達到理論上的最優——即用最小的頻寬達到最大的資訊量傳輸。詳情Google network coding。這裡給出乙個network coding 最簡單的乙個例子(如何從最上面的兩個節點將資料A和B分發給最下面兩個節點的例子):
當然,需要根據你的網路情況去設計這個最優演算法。
3樓:
裝Python3了嗎?裝了話可以這樣搞:
傳送機:python3-m
80接收機:wget
.download
(傳送機IP
/filename
)完事了傳送機上按[CTRL+C]就好了,不留痕跡/斜眼笑
4樓:
WINDOWS系統下請搜尋:HOU檔案多播很小的乙個軟體,共兩部分:傳送端和接收端。
鑑於你要同時把資料傳送到50臺電腦上的這種需求,應該是機房使用,通過批處理先在50臺電腦上執行接收端,然後在傳送端選擇檔案傳送,非常快,快到你想哭!(想起以前折騰的那麼多檔案傳輸軟體。。。)
可惜軟體原作者不更新了。。。
PS:通過共享、FTP或者IIS都不是很好第一、操作不方便
第二、各客戶機的傳輸速度是共享傳送端主機的物理總頻寬的
5樓:
如果單執行緒複製,這個是斐波那契數列的問題
假設時間單位T是刻:
第一台電腦在第一刻,複製到第二個電腦上,然後這2個電腦,在第2刻同時複製出4個,然後是8個1,2,4,8,16,32,64。。。複雜度大概是2^N規模,時間需要T*LgN
就是說1024個電腦,需要十次
50個電腦,2^6=64>50,需要6次。
當然,可以考慮縮小檔案規模,把檔案M變成k個小m,需要時間變成t,這樣可以大大縮小總體時間。如果m可以並行,那麼時間就變成了t=T/k
每個電腦上提前裝個軟體,用來分發複製,時間需要T*Lg(N)/k ,但是要加上乙個分割C1和乙個合併C2的時間。
這要求C1+T*Lg(N)/k+C2的最小值,要測定三個變數C1、C2和k的最優比是多少。
如果C1,C2和k成正比,那麼就變成了
2ck+T*Lg(N)/k的最小值,這裡只有k是變數,用大一知識,對這個函式求2次導數=0,就可以找到在取值範圍內的極值點,得到k
大概思路如此,有些數學早忘記了,可能有不精確的地方,希望大家彌補。
6樓:
成熟的解決方案可以用syncthing,https://github.com/syncthing/syncthing/
。配置簡單,支援多種作業系統,自帶Web GUI。
P.S. Please don't try to solve a non-existent problem.
7樓:
P2P唄...
非技術共享一些經驗...
以前寢室裡需要多人共享的時候...
做開始我用共享資料夾,大家都來拖,結果大家都慢的要死,還經常掉線...
後來我就做成BT種子發布出去,大家都來下...就很好了...O(∩_∩)O
8樓:
當然是組播,工具都是現成的。
這兩個配套使用即可!
9樓:Tech Priest
答主沒限定必須用乙太網和tcp/udp 協議。要想最快你需要的是infiniband或者omnipath, 你也不用關心底層的那些協議和API, 裝個MPI,然後直接MPI_Bcast,體驗一下什麼叫100Gb/s的頻寬,什麼叫幾百納秒的延遲,什麼叫做RDMA(記憶體到記憶體直接複製)。這就叫「一力破十會,菜刀破武術,板磚破氣功。」
10樓:Coldwings
看到題目被糾正為100MB資料量了。沒毛病,這個量也不是很大,順帶一提,儘管IGMP看起來很嬌貴,但乙個500Mbps的組播對正規的千兆交換機而言都不是問題,也就一秒多就完事了。儘管UDP無流控,但是至少我所用過的幾款交換機似乎都能設定組播速率,而後文中提到的NORM和PGM更是為了提供可靠性及重傳送機制,必須設定傳輸速率(因為重發需要快取已傳送的包,二者使用記憶體儲存,在IVL內對所有發出內容儲存需要占用記憶體,為控制最大記憶體占用需設定最大速率)。
UDP組播顯然效能更高,不過有兩大問題,一是包長受限,UDP不是TCP,理論模型是Datagram不是Stream;二是包序和丟包的問題。
可靠組播這個東西,其實很早即有人研究了很多方案了。比較經典的有openpgm的EPGM和PGM協議,利用UDP/RawSocket模擬TCP做到可靠有序傳輸,順帶幫你解決了包變流的問題,不用擔心包長了;還有乙個是啥美國海軍先進通訊技術研究所折騰出來的NORM協議,原理類似,用過但未深究。利用KCP協議理論上也能搞可靠UDP,不過我也沒去折騰。
當然自己折騰個協議照理說也沒啥不好的,不過這裡面門道還是挺多的,需要比較紮實的基礎。
再一種方法是用類似於BT/ed2k的方式做p2p傳輸,這樣能夠隨著傳輸過程逐步增加資料來源而使得傳輸逐步加快。畢竟如今的網絡卡基本都是全雙工的了,出入不衝突,而正常的交換機的頻寬遠超網絡卡能力。
不過話說回來了……100Mb……不到13MB……這個資料量簡直小得可憐……
11樓:遺跡
還是UDP組播吧,把檔案分片+校驗碼,都傳完了上報乙個丟失列表,丟了哪個就重傳哪個。
可以設定乙個超時時間,按順序傳送(但是因為使用UDP協議還有組播,最終還是會亂序)假設每秒傳送1000個包,第一萬號都到了第1號還沒到就可以判斷這個包丟了,發單播重傳吧。
12樓:andwxh
比較簡單的做法你可以組個鏈啊,新加入的機器從鏈末端的機器取資料。
如果資料特別大的話,有需要的話可以考慮如果新加入的機器和鏈末端機器當前進度相差太多就再開個鏈。
區域網內使用群暉如何實現多台電腦檔案高速共享?
arthors 直接明說吧,以現有裝置 包括NAS 交換機,無線路由器 均無法達到你的要求。台式電腦和NAS之間的鏈路沒有問題,NAS和台式電腦均在一台交換機裡,資料報也只會在這台交換機裡傳輸,不需要去別的裝置中轉。換了千兆交換機後還有問題就檢查一下網線和台式電腦的網絡卡。個別質量差的假冒網線雖然8...
兩台在不同區域網的電腦如何通訊?
FrostBlade 你們可以玩玩warframe。還有其他很多這類玩家做主機的遊戲,伺服器只用來聊天和匹配,然後是其他玩家接入主機的電腦來進行聯機遊戲。 EQ無 這個想法讓我第一時間想到了teamviewer。不知道其他人有沒有和我一樣想法的。另外特別想皮一下,你的這種想法在多年前就有人實現了啊,...
如何才能用 1W 塊錢組裝一台電腦??
陳木森 CPU i7 10700 2155 散熱器 賽普雷v587六銅管 229 主機板 技嘉Z490 UD 1199 記憶體條 海盜船復仇者16g ddr4 3000mhz 8g 2 520 固態硬碟 西數sn750 1TBg m.2黑盤 1199顯示卡 影馳2070super 8g大將 3750...