2016-01-01 11 views
9

このプロジェクト全体とコードは、後でPHPをホストするMySQLサーバーにホストされます。jQuery ajax、データの追加が機能しますが、データは他のエンド(コンピュータ/ユーザ)に表示されますか?

コード:

$(document).ready(function(){ 
    console.log('hello'); 
    $('input[name="nm_submit_comment"]').on('click', function(e){ 
     e.preventDefault(); 

     var frm = $(this).closest("form"); 
     var frm_id = frm.attr("id"); 
     var frm_id_splitted = frm_id.split("_"); 
     var frm_id_splitted_2 = frm_id_splitted[2]; 

     var frm_serialized = frm.serialize(); 

     $.ajax({ 
      url: "save-comment.php", 
      method: "POST", 
      data: frm_serialized, 
      success: function(data) {      
       data = JSON.parse(data);      
       $('div#id_div_comment_' + frm_id_splitted_2).append('<div class="cl_div_comment_content">' + data.nm_textarea_comment_content + '</div>'); 
       $('textarea.cl_textarea_comment_content').val("");     
      } 
     }); 
    }); 

}); 

jQueryのAjaxが正常に動作しています。データをデータベースに保存し、divにデータを追加します。私の質問です:データを追加した後、データは他のエンド(コンピュータ/ユーザー)に利用可能/可視になりますか?またはデータを追加した後、10秒ごとにコメントdivを読み込むために、setInterval関数を追加する必要があります。 10秒後に誰かがコメントした場合、そのコメントは他のユーザーに見えるようになります。それは すべてのコメントdivをロードするオーバーヘッドがあるかもしれません。

Facebookのステータスの更新と同じシナリオがあります。誰かが自分のステータスやコメントを更新すると、他のすべての友達にコメントが表示されます。このような例は、スタックオーバーフローの通知にあります。誰かが答えたりコメントしたりすると、すぐに通知されます。どうしたの?他のユーザーにデータを表示させるにはどうすればよいですか?

このシナリオの説明は高く評価されます。

+1

これは、リアルタイムのデータ更新を行うために 'ソケット 'によって行われます。ソケットなしでは、 'ajax'を使う必要がありますが、サーバを10秒間隔で呼び出すので、サーバに負荷がかかります。 –

+0

これが役に立つかもしれないhttp://www.smashingmagazine.com/2012/05/building-real-time-commenting-system/ –

+0

はい、setIntervalは10秒ではないと私は思います。 setIntervalをすべてのdivに設定するのは良い考えではありません。 – shibly

答えて

10

setInterval関数を使用すると、すべてのユーザーが10秒ごとにコメントセクションをリロードする必要があります。これは悪い習慣であり、サーバーの最適なセットアップではありません。しかし、それは最も簡単な解決策です。

最高の解決策はソケットです。ソケットは、1人のユーザーがコメントしたときに他のユーザーに通知し、その逆もあります。約束はhttp://www.socket.io/です。あるユーザが他のユーザに通知をした場合に通知されるように、すべてのユーザが指定された機能を聴くアプリケーションを作成する必要があります。これは、この問題を解決する軽量な方法です。なぜなら、あるユーザーがコメントを付けている(関数にシグナルを送る)場合にのみコメントが更新されるからです。

これが役に立ちます。その他として、乾杯

+0

この問題を解決する方法は何ですか? socket.ioはステータス更新システムで動作しますか? – shibly

+0

ヘビー級はすべてのユーザーが10秒ごとにコメントセクションをリロードする必要があるため、setInterval方法です。設定は簡単ですが、サーバーにとっては重いです。そして、yesのsocket.ioも状態更新のために働きます。好きなように設定することができます。 –

+0

または、ヘビー級のソリューションは、https://www.meteor.com/(necrobumpの口実)のようなものを実装することができます。 – Roberrrt

0

あなたはのsetInterval関数を使用する必要があります。すべてのdiv要素を読み込む代わりに、データベース側の各コメントにバージョン番号を関連付けることができます。コメントが更新されると、バージョン番号が増えます。したがって、setIntervalがバックエンドに到達し、そのversionIdを渡すと、バージョンの差から判断して、どのdivが更新されるべきか、そして、どちらが残されるべきかを示すフラグを送信することができます。

0

は、より良い練習がwww.sockets.ioになり、簡単な練習がsetIntervalになります示唆しています。私はこれにいくつかの点を加えてみましょう。

1)かなりの量のユーザーによってアプリケーションが使用されることが予想される場合、setIntervalを気にしないでください。

2)あなたは、ユーザーの少ない量のためのアプリケーションを必要としますが、ハードにsockets.ioは、(最初​​のOCASIONにfrightining見ることができます)を実装見つけた場合、あなたは次のアプローチを検討できます。

  • の代わりにすべてのdivを読み込み、一意のIDまたはタイムスタンプを使用し、10秒ごとにサーバーに送信します。ユニークIDより新しいアイテムがディスカッションされているとサーバーから報告された場合は、新しいコンテンツをダウンロードするために評価できる「OK」メッセージを返します。このように、「より簡単な」setIntervalアプローチを使用しますが、サーバーの負荷をできるだけ制限します。
0

setIntervalは、ユーザー数が少ない場合に役立ちます。

とにかく、チェックを開始するたびにajaxイベントを破棄する必要があります。

setInterval(function(){ 
    $check_for_new_chat.destroy(); 
    $check_for_new_chat = $.ajax({ 
    ... 
}); 
},10000); 

このようにすると、サーバーの負荷を軽減できます。

0

WebSocketを使用するほうが良いと述べた人もいますが、これはAJAX Postを削除できることを意味しています。WebSocket Serverを使用してその要求を処理し、メッセージの内容で

あなたのシステムが決して使用されない場合、10人以上のユーザーが、SetIntervalとAJAXを使用する必要があるという正しい仮定に従います。

WebSocketが頻繁に使用されることが予想される場合は、WebSocketが非常にシンプルになります.WebSocketがページを開くときのクライアントの負荷は、AJAXがページを開いてからわずか10秒です。 ASYNCを使用すると、ユーザーは気付かないことさえあります。

ウェブソケット初期ロードが少しありますので、ソケットクライアントをいつ、どのように起動するかにより、ユーザーはわずかな遅延に気づくことがあります。

PHPセッションシステムを使用して、どのユーザが何を投稿したのかを知ることができます。誰が何を投稿したのかを確認し、投稿したことを確認して誰かがWebSocketサーバ。

あなたの人口統計を知っている人はどれくらいコメントしていますか、このシステムを使用するユーザーの数はこの情報すべてが決定に関連しています。

WebSocketsルートをダウンすることを選択した場合は、セキュリティを適切に計画してください。たとえば、ユーザーがWebソケットサーバー用のデータベースにトークンを保存しているページを読み込んだときに、1分ごとにソケットクライアントがそのトークンを2分間保存します。その後、過去に期限切れのトークンを削除した場合は、crontabでこれを行うこともできますし、ページの読み込みを行うこともできます。

関連する問題