2010-07-17 62 views
0

我的工作就像一個系統Dropbox和我想知道如何當文件更改在服務器端,客戶端得到通知。我的印象是dropbox和ubuntu都通過HTTP端口運行,其工作原理如下: 1.如果客戶機上的文件發生變化,inotify會檢測到它並執行從客戶機到服務器的推送。 (我得到這部分) 2.如果文件在服務器上發生了一個簡單的未經請求的通知(只是一條消息,指示「同步時間」)從服務器發送到客戶端。然後客戶端啓動到服務器的同步。不請自來的通知,客戶端通過HTTP

我真的不關心我在做這個的語言。我只是想知道客戶如何被聯繫。具體來說,如果客戶端在具有自己的本地IP地址的防火牆後面怎麼辦?服務器如何找到它?

此外,什麼樣的消息協議將被用來做這樣的事情?我打算通過HTTP或SSH做這件事,但我沒有附件。

回答

0

花了一點點研究網絡看到這是如何工作的,但它遠遠然後我預期的更簡單。我現在正在使用標準的Java套接字。啓動偵聽套接字連接的服務器進程。然後啓動連接到服務器的客戶端。

一旦建立了連接,消息就可以被髮送回第四個。這通過NAT(網絡地址轉換)起作用,NAT是用於在防火牆後的專用網絡上路由數據包的標準方法。

1

我不確定Dropbox正在使用什麼,但它可能是websockets(不太可能,它是一個非常新的,沒有廣泛部署的東西),或者更可能是從客戶端到服務器的未決Ajax請求 - 服務器只在客戶端有新東西時纔會響應。後者是通用的方式來實現(好吧,行 - 「破解」;-)某種形式的HTTP服務器推送。