電腦老師照過來!
網路傳遞資訊勝過電視或收音機之處, 在於網路可以點對點傳送個人化的訊息; 電視或收音機贏過網路的地方, 則在於它傳播制式統一訊息時, 不管有多少人同時在收看收聽都不會有塞車問題。 事實上越多人同時收看收聽, 整體而言傳送效率越高。
在區域網路裡面, udpcast 讓你享受電視/收音廣播的快感: 當你有一個很大的檔案要派送給幾十位同學時, (理想上) 只需要花一次的傳送時間就可以搞定, 完全解決 (因為很多人同時下載同一個檔案而造成的) 網路塞車問題。
請先安裝 udpcast 這個套件。 就算你們的電腦課沒在用 linux, 光是為了派送大檔, 就值得下載並學用 (已內建 udpcast 的) 阿貴版 finnix 救援光碟。
假設老師要派送 finnix-ckhung15d.iso 這個光碟映像檔給整班的學生。
首先請學生下這個指令: udp-receiver >
/some/large/partition/finnix-ckhung15d.iso
學生的電腦上會看到類似這樣的訊息並且停在那邊等待:
Udp-receiver 20100130 UDP receiver for (stdout) at 192.168.1.143 on eth2
另一方面, 老師這邊下:
udp-sender --max-bitrate 30m --retries-until-drop 5
--log udpcast.log < finnix-ckhung15d.iso
則會看到很多學生機正在等待連線。 訊息的最後一列是:
Ready. Press any key to start sending data.
等夠多學生都已加入、 老師一按下任何鍵,
所有學生機就同步開始接收、 龍貓公車就出發囉!
實作上, 可能需要重複派送個二至三次。
因為總會有些學生趕不上公車 ;-)
另外, 有些機器特別會掉封包。
與其傳太快把很多人都拋出龍貓公車,
不如開慢一點把大家都安全送到目的地 :-)
所以我用 --max-bitrate 30m
把傳輸速率上限設為 30m bits/s。
(所以實際傳送資料的速度可能大約是 3MB/s。
這是我在我們的某間教室實驗出來的理想值。)
這同時也會把區網的頻寬留給大家做其他事。
[2015/12/15] 不論設多慢, 總有幾部電腦怪怪的, 無法接收。
而且會拖累其他電腦 -- 因為老師機為了等它, 無法繼續傳下一個封包。
所以我用 --retries-until-drop 5
指示:
如果試了五次還得不到回應, 就放棄這部電腦。
如果某位學生的電腦被放棄丟包,
他應該按 ctrl-c 中斷接收, 重新再下一次指令,
等待下一班龍貓公車。
如果龍貓公車重開幾次都還是這樣,
那就只好開放讓這幾位同學用其他的傳統方式 (http/ftp/scp) 傳檔。
命令列上的 --log udp.log
是為了要留下記錄, 以便查看傳送過程所發生的問題。
建議不要用 --nokbd
這個選項。
是我不會用還是怎樣? 用了之後怪怪的, 反而就不會傳檔了。
如果電腦上有不只一張網卡, 可像這樣:
--interface eth2
指定改用 eth2 這張網卡。
如果想要不斷地重複派送同一個大檔, 真的像公車一樣每隔一段時間就自動發一班車, 那麼可以考慮用這些選項:
--daemon-mode
: 進入無窮迴圈, 傳完後重新再服務下一批乘客--file finnix-ckhung15d.iso
傳送 finnix-ckhung15d.iso 這個檔案 [重要! 在 daemon mode 底下, 一定要用這個選項; 因為 stdin 不能重讀, 所以用如果用 input redirection (<
) 的話, 只會傳一次]--min-receivers 2
: 只有小梅一個人嗎? 不開車哦。 要等到姊姊來、 湊足兩個人才開車--min-wait 20
: 不管已有多少人上車, 至少要等 20 秒才會開車--max-wait 120
: 等了 120 秒之後, 就算只有小梅一個人也要開車
一個完整的例子:
udp-sender --daemon-mode --file finnix-ckhung15d.iso --min-receivers 2 --min-wait 20 --max-wait 120
--max-bitrate 30m --retries-until-drop 5 --log udpcast.log
有人拿 udpcast 把很大的資料庫定時備份到區網內好幾部機器。 這一篇 解釋 --fec 容錯機制、 為何最好不要用 --async。 這一篇 詳述 FEC 容錯演算法。
飛奔吧, トトロ!
抱歉, 先前遺漏兩處, 剛剛補上去: 單次傳輸時, 老師端可以用 input redirection ( < ) 的方式讀取資料檔; daemon mode 重複傳輸時, 老師端一定要用 --file 選項來指定要傳送哪個檔案。
回覆刪除