ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript、ajax、memcache、PHP_javascript スキルに基づいたシンプルなオンライン チャット ルーム

JavaScript、ajax、memcache、PHP_javascript スキルに基づいたシンプルなオンライン チャット ルーム

WBOY
リリース: 2016-05-16 16:16:02
オリジナル
1394 人が閲覧しました

オンライン チャット ルームは、複数の人々が通信するためのネットワーク プラットフォームです。ますます新しいテクノロジーの発明と成熟した応用に伴い、さまざまなテクノロジーを使用したオンライン チャット ルームも登場しています。

まず、フロントエンド技術について説明します。最新のものは、もちろん、ブラウザとサーバー間の全二重通信を実現する HTML5 ベースの WebSocket です。 WebSocket 通信プロトコルは 2011 年に IETF によって標準 RFC 6455 として設定され、WebSocket API は W3C によって標準として設定されました。 WebSocket API では、ブラウザとサーバーはハンドシェイク アクションを実行するだけで、ブラウザとサーバーの間に高速チャネルが形成されます。データは両者間で直接送信できます。ただし、Websocket は HTML5 の API であり、多くのブラウザでサポートされていないため、現在ではこの方法は特に使用されていません。 2 つ目は、ポーリング方式を使用する ajax で、サーバーからデータをダウンロードして、更新されたかどうかを確認します。その利点は、他のリクエストをブロックしない非同期リクエスト処理です。ユーザーにとっての欠点は、中断のないポーリングは帯域幅を消費するだけでなく、多くの端末とサーバーのリソースを消費することです。また、ajax ポーリングには時間間隔があるため、取得される情報はリアルタイムではありません。メッセージの場合、ajax の効率はほぼ最低になります。 3 番目のタイプは、サーバーベースのプッシュ技術 (comet) です。これはプッシュであると言われていますが、実際には、端末とサーバーの間に長い接続を確立するという原理です。この長い接続の内容が変更されたかどうかを判断することにより、使用するリソースが少なくなり、サーバーからの特別なサポートが必要になり、長時間接続が必要になるという利点があります。現在、このテクノロジーを使用するサービスが増えています。

バックエンドについて話しましょう。チャット ルームは高 IO アプリケーションであり、Weibo と同様に、データベースが最大のボトルネックになる可能性があります。また、マルチユーザー システムであるため、ユーザー数が桁違いに達すると、Mysql などのリレーショナル データベースを使用すると、クエリの負担が大きくなります。特別な要件がなければ、現時点ではチャット記録を永続的に保存する必要はないと個人的には考えています。memcache や redis などのメモリベースのストレージ システムが活躍します。以下は、私が開発した ajax php memcache に基づいたシンプルなオンライン チャット ルームです。

このチャット ルームでは、すべてのチャット レコードが memcache に保存されます。cid はチャット レコードの最大 ID を保存するために使用され、msgcid はレコードが挿入されるたびに 1 ずつ増加します。 。フロントデスクは、ajax を介して json 形式のデータを取得します。memcache はメモリベースであるため、システム全体が非常に高速に動作します。以下はシステムのソース コードです。システム全体には 2 つのファイルしかなく、合わせて 10 KB 未満です。

スクリプトホームのダウンロード

https://github.com/hitoy/online-chatroom

システム要件:
1. Memcache がインストールされている
2. PHP で memcache 拡張機能をインストールします
3. Javascript と ajax をサポートする最新のブラウザ

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート