2017-11-25 7 views
0

おそらく主な問題は、このようなコーディングのすべてに慣れているということです。しかし、ここでは何が起こっているのですか:チャットデータベースのオーバーロード(HTML、PHP、JS)

ユーザーはチャットボックスにメッセージを入力し、メッセージをデータベースに送信できます。 1秒に1回、データベースにあるすべてのメッセージデータがセッション中の各ユーザーに再表示されます(新しいメッセージがあれば更新します)。これにより、私のサイトは非常に迅速に応答しなくなり、「中断」します。

私は唯一の「新しい」メッセージを追加する方法を考えるようにしようとしてきたが、どのようにあなたは、重複を作成せずに、各ユーザーに「新しい」何であるかを追跡んなど

私はに非常に新しいですこれは、私は私がオフの構築に使うことができる基本的なアイデアを探しています。最高の方法は、常に新しい人々のための最も直感的ではありません...

助けていただきありがとうございます!

@Matt 時間を得るのに良い方法はありますか?

$date = date_create(); 
$timestamp = date_timestamp_get($date); 
$human_time = gmdate("Y-m-d\ i:s", $timestamp); 
+0

ユーザーに最後の同期時間を設定した別のテーブルを保持します。ユーザーのデバイスが新しいマッサージを要求すると、データベースから最後に太陽が出た日時を確認し、ラットシンクの後に変更/追加されたメッセージのみを送信します。 –

+0

すぐにお返事ありがとう!それはまあまあ良い考えです。私は実際には既にタイムスタンプである "メッセージ"テーブルの列を持っていますが、私のメッセージは2012年からのものであり、時間は間違っています。これは時間を得るのに適切な方法ですか? – Vether

+0

PHPでは、単純に['time'](http://php.net/manual/en/function.time.php)を使うことができます。 MySQLでは、['any any of''](https://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html)を使用してください。 –

答えて

0

は、私はあなたがメッセージたとえば

を表示するためのより良いシナリオを持つべきだと思う新しいメッセージがあるかどう最後のメッセージ> 30秒

チェックすると、すべての10、20または30秒はあなたの必要性に依存します

最後のメッセージが> 5秒なので、書き込みベースが遅いので

は、メッセージのすべての5秒を更新し、そう、すべてこの使用あなたが必要とSocket.IO、彼らがチャットしている例のこの1

var nextRequest = 1000; 

     // 2 seconds 
     if(chat.data.noActivity > 3){ 
      nextRequest = 2000; 
     } 

     if(chat.data.noActivity > 10){ 
      nextRequest = 5000; 
     } 

     // 15 seconds 
     if(chat.data.noActivity > 20){ 
      nextRequest = 15000; 
     } 

     setTimeout(callback,nextRequest); 

以上のような

に。