2010年8月9日 星期一

Awesome Drop 通訊方式

當你要把電腦上的檔案傳給 android 手機的時候,要怎麼做呢?

【Wifi】
  1. 電腦上傳檔案到某伺服器再讓 android 下載
  2. 透過FTP做檔案分享
【Bluetooth】
  1. 啟動 android 藍芽,透過物件推送將檔案送給 android

但是如果電腦沒有藍芽模組呢?如果不知道電腦的 IP 呢?


最近在 android 手機上出現的一個新的檔案傳輸方法,先在 android 手機上
下載好 awesomeDrop Client 端,並連上網路(透過 Wifi 或 3G),接著電腦連到
http://labs.dashwire.com/drop 會取得一組 PIN 碼,將這個 PIN 碼輸入到手機上
就可以開始等待檔案了。



接著只要在電腦端把檔案拖曳到瀏覽器的指定區域上,就可以將檔案 PUSH 給
android 手機了。


雖然這個方法傳輸要經過 awesome server,速度上可能有待觀察,而且如果伺服器關
機就沒辦法傳檔,不過這種星新穎的傳輸方式還是令人眼睛為之一亮。
而且其實真的蠻方便的。


這邊是我製作的 for PC 端的接收器


接著就來解說一下 AwesomeDrop 的檔案傳輸方式:

很簡單,他走的是 80 port,先不論電腦(發送)端的狀況,首先
手機啟動程式後,會發送 HTTP request 給 awesome server 確定
server 是不是還活著,接著等待輸入 PIN 碼。

輸入 PIN 碼後,會發送 GET request 給 Server,裡面附帶著對應的 PIN
http://labs.dashwire.com/session?pin=PIN-Number

如果這個 PIN 有對應的發送(PC)端在等待,就會傳回
{"download_host":"http://labs.dashwire.com"}
的 json 資料,定且給予 SessionID (設定在 Cookie 中)
(如果 PIN 不存在,會傳回 404 Not Found)

接著會導向 /download (經由 302 Temporarily Moved 做導向)
並且等待伺服器回應,其實這邊就是為什麼PC端丟檔案上去手機
端會馬上收到回應,因為手機發送 GET /download 後伺服器一直
沒有回應,等到有檔案上傳後才會回應,就這麼簡單。

接著當有檔案上傳時,伺服器回應給手機一組 json 資料,像這樣:
{"name":"1.txt","size":4,"type":"text/plain","fileId":"9ezb02.u4v46de7b9"}
name是上傳的檔案名字,如果是中文會用 \uXXXX 的方式呈現
size 是這個檔案的大小
type 是 MIME Type
fileId 就是這個檔案的 ID

由於回應帶著 Location 的導向 Header:
http://labs.dashwire.com/download/9ezb02.u4v46de7b9
直接帶到下載頁面下載檔案。

等待檔案下載完成後,就會再發送 http request GET /download
如此反覆進行。

而如果電腦端按下 reset session 時,伺服器就會回應給等待 GET /download
的手機 {"action":"reset"} 的 json 資訊通知手機斷線。

沒有留言:

張貼留言