どのように私は、ポーリングによって駆動されていないチャットサーバを作成するのですか?
-
19-09-2019 - |
質問
私は、クライアントのポーリングによって駆動され、簡単なチャットサーバーを作成しました。クライアントは、データ数秒ごとの要求を送信し、そのピアがまだ接続されているかどうかについての新しいメッセージなどの情報を渡します。
は、クライアントがモバイルプラットフォーム(iPhone)上で実行されているので、私はすぐにバッテリーを消耗ポーリング、退治の方法を模索してきました。私はそれが無限にオープンhttp接続を維持することが可能だということを読んだが、実際には、この技術を利用する方法を理解していません。私はまた、このような接続は、モバイル環境で使用するのに十分安定しているかどうか迷っています。
理想的なシナリオは、それらに影響を与えるイベントが(例えば、ピアがメッセージを投稿するか、行をオフに行くと)発生した場合、サーバーがクライアントのみにデータを送ることになります。
これは、HTTPを介してこれを実現しようとすることをお勧めです、または私は、TCP上で、私自身のプロトコルを記述する必要がありますか?どのようにハードそれは私のニーズにXMPPをカスタマイズすることであろう(私のチャットサーバーは、私は簡単に実装しなければならないいくつかの特殊な機能を持っている)。
解決
どのようにプッシュ技術はどうですか?参照 http://en.wikipedia.org/wiki/Comet_(programming)する
他のヒント
私はあなたがBOSHの上にXMPPを記述していると考えています。
http://xmpp.org/extensions/xep-0206.htmlする
私はチャットサーバと非モバイルデバイス上のJavaScriptクライアントの間で、このHTTP-結合法を使用しました。それは私のためによく働いています。
あなたはこのプロジェクトをチェックアウトしたいかもしれませんにその彗星を含む様々な技術を使用しています。 リリースの詳細はこちらをしている、ここでそのページからの抜粋は、/ <ですP>
これは、私の明確な喜びができるようにします 最初の公開上映を発表します 私が取り組んできたプロジェクトの 先月の私の暇な時間で、または 2、新しいWebベースのIRCチャット アプリケーションます。
このプロジェクトはの多くを結集します でなければならなかった新技術 これを実現可能にするために開発され、 スケーラブルかつ効率ます。
根本的なツールのいくつかはに構築します 私が考えるこのかのうを作ります 「十分に安定」は既にリリースされ、 このよう PHPソケットデーモンライブラリのよう 私は扱うことができるように書いています 多くの数百〜数千まで 「彗星」HTTP接続、および等しいです IRCクライアント接続の量ます。
私はちょうどこの記事を見つけました>私自身、(私は質問に呼ばれる)以下の技術が記載されております:
...クライアントは、HTTP要求を作成しています サーバは、要求を保持しています キューにメッセージがあるまで プッシュする。 TCP / IP接続がある場合 紛失したり、タイムアウト、クライアントの意志 新しいHTTPリクエスト、および遅延を作ります 唯一の往復時間になります 要求/応答のペア。 。 。このモデル 効果的に2つのTCP / IPが必要です HTTP、クライアントへの接続 サーバー、しかしどれも永久と したがって、モバイルフレンドリー
私は、これはほぼ不可能で危険だと思います。インターネットは、クライアントとサーバー間の接続が常に信頼できないとして扱われていることステートレスとコネクションレスの意味を動作します。そして、これは楽しみのためではありません。
あなたは新しい問題を導入しているステートフル接続を取得しようとすることで。特に、第3世代のアプリケーションから。どのような接続が切断された場合は?あなたは、サーバーを制御することはできませんし、プッシュすることはできません。
私はそれもSMS /テキストメッセージを送信することが容易にして、それを処理するアプリケーションを持っていると思います。