1

yahooメッセンジャーを使って友達とチャットしています。私の友人がオンラインになるたびに (ほぼ中間)、YM は私に通知します。Yahoo! (および他の企業)はこれを実装するために何をしますか?私が推測する限り、この問題を解決するにはいくつかのテクニックがあります:

  • プル: クライアントは常に (おそらく 500 ミリ秒の期間) サーバーに、(ユーザーのリスト内の) どのユーザーがオンラインになったのかを尋ね、ユーザーに通知します。

  • プッシュ: サーバーはどのユーザーがオンラインになるかを判断し、クライアントに通知を送信します。

2 番目のアプローチは、はるかに受け入れられます。ユーザーのデータには、彼の友人 (彼をリストに追加した人) のリストが含まれる場合があり、ログイン イベントが発生すると、サーバー アプリはこのリスト内のすべてのユーザーに通知メッセージを送信します。

OK、これは私の推測です。実際にどのように実装されましたか?教えて頂けますか?

ありがとうございました。

4

8 に答える 8

3

サーバーはデータをプッシュしています。サーバーにはあなたの友達のリストがあり、さらに重要なのはあなたが誰のリストにいるかのリストです。サインオンすると、その 2 番目のリストを調べて、接続されている各クライアントにメッセージをプッシュします。それは本当にとても簡単です。具体的な実装の詳細については、Pidgin のソース コード ( pidgin.im ) を参照してください。

于 2009-05-07T02:51:02.303 に答える
2

Wireshark やその他のネットワーク トラフィック インスペクターを使用して、実行中の Yahoo Messenger で何が起こっているかを正確に確認することをお勧めします。

于 2009-05-07T02:36:34.507 に答える
1

「プッシュ アーキテクチャ」である必要があります。

サーバーは、多くのユーザーの絶え間ないプルを許容できません。

于 2009-05-07T02:46:19.647 に答える
0

おそらく長命の HTTP 要求。IM クライアントはサーバー上の HTTP メソッドを呼び出しますが、サーバーは更新があるまで応答しません。その時点で「更新」で応答し、IM クライアントは別の HTTP メソッドを呼び出して更新を取得します。

インターネット上の多くの (ほとんどの?) 人々が NAT ルーターの背後にいるため、実際のプッシュは不可能です。

于 2009-05-07T02:35:38.520 に答える
0

Buddy Checkと同様のテクノロジーを使用していますが、ユーザーが知りたい場合にのみ通知します。しかし、Buddy Checkは本当の真実を教えてくれます。

于 2009-05-07T02:41:53.260 に答える
0

ソース コードやネットワーク パケットを自分で調べることもできるという意見に同意しますが、別の観点から考えてみてください。数十万人のユーザーがいて、ほとんどのユーザーの「仲間」がおそらく数十人しかいない場合、どちらのアプローチがより理にかなっています。 ?

  1. 何十万ものユーザーが数秒ごとにサーバーに ping を送信する = 大量の負荷
  2. 友人のステータスが変化したときにクライアントに更新をプッシュします。これは、はるかに小さな規模で発生する可能性が高く、数分ごとにいくつかの更新が行われます。
于 2009-05-07T02:43:11.603 に答える