2017-02-28 5 views
-3

私はPHPとajaxでシンプルで生のチャットシステムを実装しています。基本的な機能は、新しい連絡先を追加して、基本的に電報やwhats'appのような、彼らとの会話をすることです。だから私はたくさんのチャットをしているし、今私は連絡先に新しいメッセージを通知する機能を実装します。私はこれについて何かを読んだが、私は多くを理解していなかった。それを作る方法、私は長いポーリングまたはwebsocketについて読んだが、これは新しいブラウザでのみ動作する。これは非常に悪いことですが、ajaxの機能では毎秒サーバーにリクエストを送信し、現在のチャット内のすべてのメッセージをリロードしますが、他のチャットはリロードせず、通知を視覚化できませんでした。私を助けてください:DDデータベースが更新されたときにアラートを送信する方法

+1

これは広すぎます。唯一のことは何をするのかという基本的な考え方です。しかし一般的な考え方は、オブザーバーがデータベースの変更を定期的にチェックすることです(*レコードのCOUNTが変更されたかどうかを確認する*など)。 –

+0

回答ありがとう、ありがとう、私は例えばevreryのような関数が必要だと言って、何かデータベースにチャンスがあり、何が変わったかによって、私は何かをします、この場合は通知を送信しますか? – samuele

+0

私は、あなたが望むことをするための一般的なアプローチを説明した答えを追加しました(*はコメント*が長すぎます)。うまくいけばそれはあなたのアプリケーションにそのアプローチを実装することができます。 –

答えて

0

これを行う方法の一般的なアイデアは、定期的にデータベースが変更されたかどうかを確認するために電話をかけることです。これにAJAXを使用して、例えばsetInterval(myAjaxFunction, 3000)のような関数を呼び出して、3秒ごとにチェックすることができます。

データベースをチェックするには、テーブルのレコード数を調べて、最初に格納する方法があります。次のようなものがあります。

SELECT COUNT(*) FROM tableName 

テーブル内のレコード数を取得します。これを最初に行い、それをJavaScriptに保存してから、AJAXを返してクエリの値を送信させます。 AJAX呼び出しの後success

if(queryResult != currentRecordCount){ 
    currentRecordCount = queryResult; 
    sendNodification(); 
} 

:次に、あなたのような何かを行うことができます。

これは、3秒ごとにチェックするオブザーバーを作成します。データベース内で何か変更があった場合は、sendNodification関数を呼び出します。

+0

はい、fanstastic私はそれのようなものを作ったが、この機能で、私は今どの行が変更され、特定のユーザーに通知を送信することはできません!私はメッセージを受け取った特定のユーザーに通知を送信したいからです!お返事ありがとうございます – samuele

+0

@samueleあなたのIDは整数をインクリメントしているだけで、 'INSERT'ですか?もしそうなら、IDで新しいレコードを選択し、代わりに 'queryResult> currentRecordCount'と仮定して' WHERE(ID> queryResult - (queryResult - currentRecordCount)) 'を使用します。レコードには、これがどのユーザーになるかについての情報がありますか?もしそうなら、クエリでも同様のことをしたいでしょう( 'SELECT user FROM TblName WHERE ...')。 –

+0

クライアントのテーブルをコピーしてデータベースからテーブルを取得し、ループスルーして相違点を確認することは、より強力なアプローチですが、サーバー全体でテーブル全体をプルするのは負担になります。しかし、レコードの量が比較的少ない場合、これは問題ありません。 –

関連する問題