0

私はシステムのようなドロップボックスに取り組んでおり、サーバー側でファイルが変更されたときにクライアントがどのように通知されるのか疑問に思っています。私の印象では、Dropbox と ubuntu のどちらも HTTP ポート上で動作し、次のように動作します。 1. クライアント マシンでファイルが変更されると、inotify がそれを検出し、クライアントからサーバーへのプッシュを実行します。(私はこの部分を取得します) 2. サーバー上でファイルが変更された場合、単純な一方的な通知 (「同期する時間」というメッセージのみ) がサーバーからクライアントに送信されます。次に、クライアントはサーバーへの同期を開始します。

どの言語でこれを行うかはあまり気にしません。クライアントがどのように連絡を受けるのか疑問に思っています。具体的には、クライアントが独自のローカル IP アドレスを持つファイアウォールの背後にある場合はどうなりますか。サーバーはどのようにそれを見つけますか?

また、このようなことを行うために使用されるメッセージング プロトコルの種類は何ですか? HTTP または SSH 経由でこれを行うことを計画していましたが、それを行うための添付ファイルはありません。

4

2 に答える 2

1

Dropbox が何を使用しているのかはわかりませんが、 Websocket (可能性は低いですが、かなり新しく、広く展開されていないものです) か、クライアントからサーバーへの保留中の Ajax リクエストである可能性が高く、サーバーは次の場合にのみ応答します。それはクライアントのための新しいものを持っています。後者は、HTTP で何らかの形式の「サーバー プッシュ」を実装する一般的な方法です (まあ、「ハック」;-)。

于 2010-07-17T16:08:36.297 に答える
0

これがどのように機能するかを確認するには、ネットワークについて少し調査する必要がありましたが、予想よりはるかに簡単です。現在、これには標準の Java ソケットを使用しています。ソケット接続をリッスンするサーバー プロセスを起動します。次に、サーバーに接続するクライアントを起動します。

接続が確立されると、メッセージを送り返すことができます。これは、ファイアウォールの背後にあるプライベート ネットワークでパケットをルーティングするための標準的な方法である NAT (ネットワーク アドレス変換) を介して機能します。

于 2011-02-08T17:11:14.947 に答える