P2PFileSharing master READ ONLY 0
  • explorer
  • search
a [App]
a CG.P2PFileSharing
a README.md
a app.ts
a [Test]
a test
  • README.md

P2P檔案分享

TL;DR

EnhServer與TURN伺服器不會記錄你傳輸之資料,擔心隱私或資安問題請自行考慮後再決定是否使用本專案。
檔案最大應為 (2GiB - 2MiB) (已測試chrome/edge、firefox),若超過建議是採用壓縮檔分包個別傳輸。

註: - Windows的GB是GiB,即1024^3 Bytes - Linux的GB是1000^3 Bytes

使用須知

本專案使用WebRTC傳輸資料,藉由EnhServer協助使用者交換連線資訊,以順利建立連線。
本專案無需於EnhServer註冊帳號便可直接使用。

本專案由 雪姬 提供STUN/TURNS伺服器,最大100Mbps總中轉頻寬。
伺服器可能並不算穩定,若有問題可至 Discord 群組 提醒我修復伺服器。
(TURNS為有加密之TURN伺服器,自建預設無加密,有需要可以使用ACME Client/Certbot向Let's encrypt申請證書以啟用加密)

若想要使用自有的STUN/TURN伺服器,請參閱 Coturn Project on Github 學習如何使用。
也可以自行建立自己的EnhServer,確保流量都可受自己控制,原始碼開源於 EnhServer-monorepo on github 上。

起因

有時想臨時分享檔案,但又擔心透過雲端硬碟傳遞資料沒有隱私。
因此建立起此專案,可以不讓第三方擁有自己的資料。
雖然也可透過EnhServer提供之訊息交換功能傳遞分塊。
但一來會對EnhServer的頻寬與記憶體帶來挑戰,二來則是瀏覽器端不便對資料進行處理。
再加上會帶來一些些複雜度,於是便透過WebRTC簡化這個流程。

細節 (不關心可跳過)

首先先了解何為WebRTC。
WebRTC為於網路上實現之實時通訊。
需要兩類資料以建立連線:SDP資訊(offer/answer)與ICE資訊(IP、port、etc.)
首先使用者雙方須先交換SDP資訊,此部分如同連線之鑰匙與鎖,雙方不匹配就無法成功建立連線,該部分由EnhServer中轉。
當SDP交換完成時,雙方會各自向STUN/TURN伺服器取得可使用的連線資訊(ICE Candidate)。
之後會再透過EnhServer交換ICE資訊,並嘗試建立起連線。

而取得資訊可以透過兩類協議:STUN協議、TURN協議。
前者用來產生端到端連線,沒有任何中轉,但是對網路(NAT類型)有所要求。
後者則是透過一中轉伺服器轉發流量到對方一側,對NAT類型無要求,連線成功率提高許多,通常於STUN失敗時使用。

References

MDN(Mozilla Developer Network Web docs)
- RTCPeerConnection API
- RTCDataChannel API
- RTCDataChannel Example

iT邦幫忙 - 菜雞前端邁入網頁即時通訊(WebRTC)之旅

Authors

雪姬
不會取名字

READ ONLY
  • problem
  • console
No problems have been detected so far.
Ln 1, Col 1, Sel 0
Markdown