オンラインチャットルームは、複数の人とのコミュニケーションのためのオンラインプラットフォームです。ますます多くの新しいテクノロジーの発明と成熟により、オンラインチャットルームもさまざまなテクノロジーを使用しています。この記事を簡単に要約したいと思います。
まず第一に、フロントエンドテクノロジーについて話しましょう。最新のものは、もちろんHTML5ベースのWebSocketで、ブラウザとサーバーの間のフルダップレックス通信を実装しています。 WebSocket通信プロトコルは、2011年にIETFによって標準RFC 6455として指定され、WebSocket APIはW3Cによって標準として指定されました。 WebSocket APIでは、ブラウザとサーバーは握手するだけで、ブラウザとサーバーの間に高速チャネルが形成されます。データは、2つの間に直接送信できます。ただし、WebSocketはHTML5 APIであるため、多くのブラウザにはまだサポートがありませんので、この方法は現在特に使用されていません。 2番目のタイプはajaxです。ポーリング方法を採用しています。たまにサーバーに行ってデータをダウンロードし、更新されているかどうかを確認します。その利点は、非同期リクエスト処理(同期も設定できます)であり、ユーザーの他の操作をブロックしません。不利な点は、途切れない投票が帯域幅を消費するだけでなく、ターミナルとサーバーのリソースをあまりにも多く占有することです。さらに、AJAXポーリングの時間間隔があるため、取得したメッセージはリアルタイムではありません。これはメッセージトリガーではなく、Ajaxの効率はほぼ最も低いためです。 3番目のタイプは、サーバーベースのプッシュテクノロジー(彗星)です。プッシュと呼ばれますが、実際には擬似プッシュです。原則は、端末とサーバーの間に長い接続を確立することです。フロントデスクは、この長い接続のコンテンツが変更されたかどうかを判断することにより、コンテンツを取得します。その利点は、リソースが少なく、リアルタイムのパフォーマンスが優れていることです。サーバーからの特別なサポートが必要であり、長い間接続を占有しています。現在、この技術がますます多くのサービスを採用しています。
背景について話しましょう。チャットルームは高いIOアプリケーションであり、データベースが最大のボトルネックになる可能性があります。チャットの特徴は、Weiboに似た多くの短いテキストがあることです。さらに、マルチユーザーシステムに属します。ユーザーが数桁に達すると、MySQLなどのリレーショナルデータベースが使用される場合、クエリ圧力は非常に高くなります。特別な要件がない場合、私は個人的には、チャットレコードを永久に保存する必要はないと考えています。現時点では、MemcacheやRedisなどのメモリベースのストレージシステムが役割を果たすことができます。以下は、私が開発したAjax+PHP+Memcacheに基づくシンプルなオンラインチャットルームです。
このチャットルームでは、すべてのチャットレコードがMemcacheに保存されます。チャットレコードの最大IDはCIDに保存され、チャットレコードはMSGCIDで保存されます。挿入されたレコードごとに、CIDは1だけ増加します。フロントデスクはAJAXを介してJSON形式のデータを取得します。 Memcacheはメモリに基づいているため、システム全体が非常に高速に動作します。以下はシステムのソースコードです。システム全体には2つのファイルのみがあり、一緒に10kb未満です。
wulin.comダウンロード
https://github.com/hitoy/online-chatroom
システム要件:
1。Memcacheがインストールされています
2. PHPにMemcache拡張機能をインストールします
3。JavaScriptとAjaxをサポートする最新のブラウザ