## 平臺無關(guān)
理論上來說, 快速傳輸方案是跨平臺的. 對于 iOS / Android 來說, 由于操作系統(tǒng)對于權(quán)限管理的不同策略,
導(dǎo)致某些操作在 Android 上可以由程序自動執(zhí)行, 而在 iOS 上需要用戶介入操作. 比如:
1. 打開藍牙模塊.
2. 打開 Wifi 模塊.
3. 建立 Wifi 熱點.
4. 連接 Wifi 網(wǎng)絡(luò).
## 快傳方案原理
發(fā)現(xiàn)階段 -> 傳輸階段
快傳的整個流程的核心分為兩部分:
- 發(fā)現(xiàn)階段: 發(fā)送端和服務(wù)器端需要互相知道對方的標識.
- 傳輸階段: 一旦雙方知道對方的唯一標識以后, 可以通過建立數(shù)據(jù)鏈路來互相通信, 包括傳輸文件.
## 發(fā)現(xiàn)階段
- UDP 廣播: UDP 廣播的先決條件是發(fā)送方和接收方處于同一個Wifi網(wǎng)絡(luò)環(huán)境中. 如果發(fā)送方和接收方不在同一個 Wifi 環(huán)境中, 則無法發(fā)現(xiàn).
- 藍牙 廣播: 地理位置限制, 要求發(fā)送方和接收方處于藍牙協(xié)議允許的距離之內(nèi).
- 聲波 廣播: 地理位置限制, 要求發(fā)送方和接收方能夠互相接收到聲波信號, 距離非常小.
- ZeroConf/Bonjour 協(xié)議: 基于mdns協(xié)議, 同一局域網(wǎng)的設(shè)備和服務(wù)發(fā)現(xiàn).
- 服務(wù)器協(xié)助: 如果連接雙方可以連接到服務(wù)器, 可以由服務(wù)器輔助發(fā)現(xiàn).
## 傳輸階段
- Wifi Direct
- IP網(wǎng)絡(luò)傳輸
- 藍牙傳輸
- 聲波傳輸
### Wifi Direct 傳輸
在 Wifi 模塊使能的情況下, 硬件直接傳輸, 無需接入網(wǎng)絡(luò), 不使用 IP 協(xié)議, 通信雙方在 200 米范圍內(nèi)有效. 支持 802.11a, 802.11g
802.11n 的 Wifi 模塊都支持 Wifi Direct 協(xié)議. 但是 Wifi Direct 傳輸不能廣播, 所以不能用于通信雙方的設(shè)備發(fā)現(xiàn). 在啟動 Wifi
Direct 之前, 可以通過藍牙或者聲波的廣播用于設(shè)備發(fā)現(xiàn), 蘋果的 AirDrop 使用的是藍牙協(xié)議.
### IP 網(wǎng)絡(luò)傳輸
- 同局域網(wǎng)內(nèi)
如果通信雙方在同一局域網(wǎng)內(nèi) (通過 UDP 廣播發(fā)現(xiàn)), 兩個設(shè)備可以直連, 通過基于 TCP 的某些應(yīng)用協(xié)議(HTTP, FTP, 等)進行文件傳輸, 其中一臺設(shè)備作為 Server, 另外一臺設(shè)備作為 Client.
- 不同局域網(wǎng)內(nèi)
1. P2P
a). 直連和打洞
不同局域網(wǎng)內(nèi)的設(shè)備, 也有可能進行直連, 如: 多個個局域網(wǎng)可以互聯(lián) 另外一種情況是作為服務(wù)器端的一方在網(wǎng)關(guān)或者防火墻上有映射的端口,
能夠透過網(wǎng)關(guān)接收客戶端方的鏈接請求, 但是這種情況下需要在網(wǎng)關(guān)或者防火墻上進行配置, 現(xiàn)在的應(yīng)用場景基本不可能使用這種方式.
現(xiàn)在網(wǎng)關(guān)一般具有 uPnP 功能, 服務(wù)方可以通過發(fā)送 uPnP 協(xié)議命令動態(tài)在網(wǎng)關(guān)上配置端口映射, 從而可以正常接受客戶端的鏈接, 進行通信. 但是這種情況下, 雙方不能直接互相發(fā)現(xiàn), 需要借助輔助的通信手段進行, 如藍牙, 聲波, 服務(wù)器輔助發(fā)現(xiàn)等.
c). 建立Wifi熱點
另外一種情況是作為服務(wù)器的一方可以建立 Wifi 熱點, 要求客戶端連接到此熱點上, 這樣雙方實際上處于同一局域網(wǎng)內(nèi), 可以使用同局域網(wǎng)
內(nèi)的通信傳輸方式. 受操作系統(tǒng)的限制, 某些系統(tǒng)(如 iOS), 程序或者 API 不能直接創(chuàng)建熱點, 接入熱點, 需要用戶手動操作. 體驗上不
好,雖然也可以通過其他通信手段, 如藍牙或者聲波, 對用戶的操作進行一些提示.
2. 服務(wù)器中轉(zhuǎn)
只要雙方能都連接到中繼服務(wù)器上, 則可以由服務(wù)器進行文件的轉(zhuǎn)發(fā). 這種雖然能傳輸文件, 但是和快速傳輸文件的初衷相背離.
### 藍牙傳輸 & 聲波傳輸
近距離的傳統(tǒng)傳輸手段, 不再贅述.
## 技術(shù)方案
快牙的技術(shù)方案主要采用以下兩種:
1. UDP 在局域網(wǎng)內(nèi)設(shè)備發(fā)現(xiàn)進行直連, 通過基于 TCP 的應(yīng)用協(xié)議進行文件傳輸.
2. 有局域網(wǎng)但是不能發(fā)現(xiàn)的情況下使用服務(wù)器中轉(zhuǎn)的模式.
3. 沒有 Wifi 網(wǎng)絡(luò)但是雙方能連接到服務(wù)器上, 使用服務(wù)器中轉(zhuǎn)的模式.
## 結(jié)論
現(xiàn)在看來, 通過 藍牙 + 聲波 進行設(shè)備發(fā)現(xiàn), 通過 Wifi Direct 進行文件傳輸, 是一個近距離文件快速傳輸?shù)闹饕桨? 其他的傳輸方案
可以作為極端情況下或者非近距離情況下的補充.
?iOS 和 Android 都支持 Wifi Direct
還有那些需要補充的大神一起研討