0

この無料のライブラリを使用して、PHP経由でSMPP接続を確立しています。メッセージを受信するために、例に示す次のコードを使用しています。

<?php
    $GLOBALS['SMPP_ROOT'] = dirname(__FILE__); // assumes this file is in the root
    require_once $GLOBALS['SMPP_ROOT'].'/protocol/smppclient.class.php';
    require_once $GLOBALS['SMPP_ROOT'].'/transport/tsocket.class.php';

    // Construct transport and client
    $transport = new TSocket('your.smsc.com',2775);
    $transport->setRecvTimeout(60000); // for this example wait up to 60 seconds for data
    $smpp = new SmppClient($transport);

    // Activate binary hex-output of server interaction
    $smpp->debug = true;

    // Open the connection
    $transport->open();
    $smpp->bindReceiver("USERNAME","PASSWORD");

    // Read SMS and output
    $sms = $smpp->readSMS();
    echo "SMS:\n";
    var_dump($sms);

    // Close connection
    $smpp->close();
?>

ブラウザウィンドウでスクリプトを実行し、指定された60秒以内に携帯電話からSMSを送信すると、完全に機能しますが、長い間機能させる方法がよくわかりません。つまり、実際の状況のように、SMSを受信したときにバックグラウンドで実行し、いくつかのイベントをトリガーする必要がある場合です。それ、どうやったら出来るの?これで、SMSを取得するために毎回ページを更新する必要があり、それは1回しか機能しません。前もって感謝します。

4

3 に答える 3

3

ソリューションをブラウザ内で実行する必要がある場合は、スクリプトから直接SMPPサーバーに接続しないでください。これは、シングルユーザーシナリオにつながります。

readSMS呼び出しの周りに無限ループを設定し、デーモンとして実行されるコンソールアプリケーションにする必要があります。次に、readSMSの結果をデータベースに書き込み、これをWebアプリケーションから読み取ります。これを使用すると、htmlリフレッシュまたはデータベースにクエリを実行して着信SMSを表示するいくつかの派手なajaxを使用できます。

通常、SMPPレシーバー接続はソケット上でブロッキングモード(タイムアウトなし)で実行されます。これは、SMSまたはenquire_link(enquire_link_respによって応答される必要があります-ライブラリがこれを自動的に行う)のいずれかを受信するためです。SMSを読むときはいつでも、それを処理して(データベースに入れて)、もう一度readSMSを呼び出します。次のSMSが届くまでブロックされます。

于 2012-12-14T23:39:06.847 に答える