2016-08-20 11 views
0

私は自分のデータベーステーブル "サウンドボード"の状態の変化に迅速に対応する必要があります。ステータスが2に変更された場合、私のアプリケーションがそれに気づくことを望みます。より良い無限ループまたはajax/setIntervalコーム

それでは、無限ループの場合とajax/setIntervalスクリプトの場合の2つの例を作成しました。

まず無限ループ:

<?php 

// Settings & Connection 
set_time_limit (0); 
$data = array(
    "id" => "", 
    "file" => "" 
); 
$db = new mysqli('p:localhost', 'username', 'password', 'database'); 

// Query 2 DB 
$sql = "SELECT id, name, file FROM soundboard WHERE status = 2 LIMIT 1;"; 

while(TRUE) { 
    $result = $db->query($sql); 

    if($result->num_rows > 0) { 
     // Fill $data here 
     echo json_encode($data); 

     break; 
    } 
    unset($result); 

    sleep(5); 
} 
$db->close(); 
unset($db, $data, $sql); 
exit; 

?> 

それとも、これはもパフォーマンスのために良いですか?

<?php 

// Settings & Connection 
$data = array(
    "status" => 0, 
    "id"  => "", 
    "file"  => "" 
); 
$db = new mysqli('localhost', 'username', 'password', 'database'); 

// Query 2 DB 
$sql = "SELECT id, name, file FROM soundboard WHERE status = 2 LIMIT 1;"; 
$result = $db->query($sql); 

if($result->num_rows > 0) { 
    // Fill $data here 
} 

$db->close(); 
echo json_encode($data); 
unset($db, $data, $sql); 
exit; 

?> 

あなたが私を助けて、私が何をしようとしているのか理解してくれることを願っています。

+0

は、WebSocketをしてみてください、AJAX setintervalsはおじいちゃんの技術です。あなたの無限ループでWebソケット – Vigikaran

+0

でプレイする無料アカウントのPubnub、Pusherをチェックすると、PHP実行時間の制限がありますので、挿入スクリプトでWebソケットメッセージを追加して通知してください。 – Vigikaran

+0

@Vigikaranウェブソケットはまだ比較的新しいすべてのブラウザが完全にサポートしています。 – JustLloyd

答えて

0

まず、無限ループは常に危険です。あなたがそれをしなければならない場合は、私はそれがより良いと思うあなたがクライアント側でこれをやっている場合:

まず誰かがそれをブロックするため、あなたのサーバーの世話をする必要があります...ユーザーは自分のPCをブロックします。それは単なるPCであり、ユーザーです。

第2に、永続的なオープン接続(PHPの無限ループのような)が必要な場合は、PHPチャットプログラムでSocket Likeを開くことをお勧めします。

permormanceについては、Shocketは私の意見では最良の解決策です。あなたは、このリンクをチェックすることができます

https://www.sanwebe.com/2013/05/chat-using-websocket-php-socket