2017-06-03 5 views
1

私はEventSourceメソッドを使用して、自分のWebサイト上のアクティブなユーザーのオンラインステータスを取得しました。この次のJavaScriptコードで したがって、このコードは、連続set_online.phpファイルを実行しているすべてのページEventSourceを使用してユーザーのオンライン状態を取得することは信頼できますか?

var source = new EventSource("set_online.php");

に挿入されます。今、私はこの約2つの懸念しているset_online.php次のコードでは、サーバー側で

すなわち

$query = "UPDATE my_db SET last_active = '{$current_time}' WHERE id = {$_SESSION["id"]}"; 
       $result = mysqli_query($connection, $query); 
を実行します。データベースはリアルタイムで連続的にlast_active

  1. を更新しているとして、それはサーバーの負荷に影響を与えるのだろうか?
  2. ユーザーがWebサイトに接続されている限り、接続は開いているので、脆弱性が作成されますか?

答えて

1

SSEはこの目的には適していません - または少なくともそのために設計されていません。 SSEは、一定のストリームのイベントですサーバーからまでです。

あなたのスクリプトは動作します。 PHPスクリプトは1つのことを行い(データベースを更新する)、終了します。終了すると、接続が閉じられます。ブラウザで接続が切断されたことが表示され、数秒後に再び再接続されます。サイクルが繰り返されるとき。

2つの質問について: 1.実際には連続していないので、3秒ごとに再接続してください。サーバー負荷が重大な場合があります。 2.接続は継続的に開いていません。それが新しいものであれば、新たな脆弱性は生じません。

JavaScriptインターバルでSSEの代わりにajax呼び出しを使用します。これらの利点:タイマー間隔での技術なので、より広いブラウザのサポート

  • 明示的な制御

    • 古いので、あなたは、待ち時間とサーバーの負荷のバランスを制御することができます。
  • 1

    あなたのソリューションは重く、不要ですが、より良い解決策は、アイデアを逆転させて、サーバーがユーザーのステータス情報をクライアントにプッシュできるようにすることです。

    これは、socket.ioなどのライブラリを使用してソケットを実装することで実現できます。達成するのは非常に簡単で、よりスケーラブルなソリューションです。

    ページがロードされると、クライアントとサーバーの間で接続が確立され、サーバーがクライアントと通信したい場合は、単純にuser-statusなどのイベントを送信できます。

    クライアントはこのイベントを聞いて、それに応じてビューを更新することができます。

    +0

    socket.ioの実装方法を教えてください。私はそれについてサーフィンしたが、それを理解できない – Observer

    関連する問題