2012-03-11 58 views
1

PHP、MySQL、JavaScriptを使用してWebチャットシステムを作成しようとしています。PHP + MySQL + JavaScriptのWebチャット

現在、増分ID(はい、インデックスされています)、タイムスタンプ、送信者、メッセージ自体を含むMySQLデータベースにメッセージを格納しています。私は、AJAXを使用して500msごとにデータベースにクエリを出し、最後に受け取ったメッセージより最近のメッセージがあるかどうかを確認します。しかし、複数のユーザーがオンラインになっているときにMySQLサーバーに負荷がかかるため、これはひどく非効率的な気がします。 Googleとここでちょっと調べてみると、すべてのことがこのやり方を指しているようです。

私の質問:これを行うには良い方法はありますか?サーバーの負荷を軽減する方法についてのヒントも歓迎します。

Apache Webサーバー上でPHP 5.3を使用しているため、これらのライブラリやプラグインと互換性があります。

EDIT: オリジナルのポストに言及するのを忘れた場合、私はIEや他の時代遅れのブラウザをサポートして心配していませんよ。

+0

あなたが正しい手順です。それが負荷を引き起こしている場合は、ちょうど時間(500ms)少しビットを試してみてください –

+0

これを見てください:http://stackoverflow.com/questions/136012/comet-and-jquery&これも:http://チャット.nodejs.org/ –

答えて

1

あなたはajax long pollingを調べる必要があります。これは単純なajax呼び出しですが、新しいデータがない場合はサーバーから結果を返さないということです。新しいデータが利用可能になるまでサーバー側で単純なループを行い、それを返すだけです。もちろん、クライアントにしばらくの間(たとえば1分)送ってからコールを再開するという結果が出ない場合は、これをやめてください。

+0

このコード例を教えてください。それは私が欲しいものかもしれないようですが、私は現時点でそれについてどうやって行くのかは実際にはわかりません。 –

+0

http://stackoverflow.com/questions/333664/simple-long-polling-example-code – slash197

0

私は、そのチャットはストレージエンジンMySQLにとってはあまりにも集中していると思います。たぶん、MEMORYテーブルタイプは大丈夫です、決してそれを使用しません。私はいくつかの開発者に話し、誰もが同意する、チャットのための最良の選択肢はMemcacheであり、独自のカスタムデーモン(メモリのみのストレージをweelとして)を書くことさえある。

クライアント側では、フラッシュ/ Javaオブジェクト経由でショートポーリング、ロングポーリング、ウェブソケット/ソケットについて読むことができます。 500msごと

が短いポーリングされているデータベースを照会するためにAJAXを使用して

3

潜在的に実行可能な基本的なアプローチ:memcacheので

  • キャッシュあなたの50の最新のメッセージ。新しいエントリがデータベースに追加されるたびにこれをリセットします。新しいユーザーが接続するときに、これらの50のメッセージを送信して、チャットルームを作成します。
  • http://www.pubnub.com/のようなサードパーティのサービスを使用して、クライアントにメッセージを送信します。新しいメッセージがあなたのチャットルームに送られるたびに、pubnubでそれを送信してください。サーバーコードは、データベースに正常に書き込んだ後にこれを行います。

ノート:私はpubnubと提携していませんよ。上記の50メッセージを使用する必要はありません。どのように設定したいかによって、接続するときにメッセージを与える必要はありません。重要なのは、この場合、ユーザーがデータベースから読み取るのを避けたいということです。このタイプのアプリケーションでは、モデルの規模が拡大する可能性は低いです。

理想的には、イベント型の環境は、この種のアプリにとって理想的です。 LAMPスタックは特に適していません。

2

このライブラリを使用することをお勧めします。Pubnub Pubnubは、javascriptやTCP言語(PHPなど)で無線信号を送信する簡単な方法です.JavaScriptは送信されたメッセージを即座に受信します。

PHPでは、データベースに保存しておけば、PubnubのPHP APIを使ってページの他の人にメッセージを送信できます。

Html、Javascript、PHPに精通していれば、それはかなり簡単に学ぶことができます。私はそれをお勧めします。

2

JavaScript、PHP、MySQL、HTMLで構築されたWebチャットシステムについて質問しています。事前構築されたソリューション:http://www.cometchat.com/http://www.arrowchat.com/を含む多くのオプションがあります。これらはすべて、http://www.pubnub.com/などのクラウドサービスによってチャットされたチャットコメットサービスを持ち、自分でホストするオプションがあります。 CometServices http://www.cometchat.com/cometservice/third-party-alternativesについて詳しくは、サービスプロバイダを比較してください。しかし、いくつかのオプションがありますが、そこから始めておくことをお勧めします。 HTMLやJavaScriptのみのソリューションのようなもっとシンプルなものが必要な場合は、10行のJavaScriptコードで簡単にリアルタイムのWebアプリケーションを構築するブログであるhttp://www.pubnub.com/blog/build-real-time-web-apps-easyを簡単にチェックできます。このソリューションは、すべてのブラウザとモバイルデバイス用の完全なクロスプラットフォームを提供することにより開発時間を短縮します。

0

ソケットはAJAXポーリングより優れたソリューションですが、ソケットベースのチャットをMySQLとどのように統合できるかはあまりありません。

私はいくつかのテストを行い、ここで働く基本的な例を持っている:https://github.com/andrefigueira/PHP-MySQL-Sockets-Chat

これは、PHPでのチャットサーバを作成するためのラチェット(http://socketo.me/)を利用します。

そして、あなたがチャットしている人の情報をサーバJSONを送信することにより、DBにチャットメッセージを送信することができ、(もちろんあなたはユーザーセッションを持っている場合)

関連する問題