0

SMSCで受信したSMSを次の表のMySQLサーバーデータベースに挿入/記録するPHPスクリプトを備えたテストラボSMSCで構成されるSMS記録システムを構築した後、現在、図面に戻っています。フォーマット(乱雑な行でごめんなさい):

| -------------- | ------------- | --------- |
| Msgid | Phoneno | メッセージ|
| -------------- | ------------- | --------- |
| 1 | 12345 | こんにちは|
| 2 | 38746 | 世界|
| 3 | 16375 | テスト|
| 。| ..... | ... |
| 。| ..... | ... |
| (autogen)| ..... | ... |
| -------------- | ------------- | ---------- |

ここで、このSMS記録システムを新しいレベルに拡張したいと思います。これにより、新しい着信SMSメッセージを既存のWebサイト(PHPにもあります)に自動的に表示できるようになります。Webサイトを手動で更新する代わりに、訪問者の数が増えると、ページのオーバーヘッドが大きくなり、サーバーに膨大な負荷がかかることになります。

もちろん、Web上でいくつかの調査が行われ、固定のJS間隔(たとえば5〜10秒)と組み合わせたAJAXでうまくいくことが示唆されていますが、これは、新しい着信SMSが多くない場合に多くの冗長性をもたらします当日。

それに加えて、ロングポーリングAJAXがそのトリックを実行する必要がありますが、これは設定された間隔のスレッドを消費し、システム効率も低下させます。

したがって、基本的に、Cometはオプションの1つですが、PHPプラットフォームに実装することはお勧めしません。

したがって、現在計画中の私のアイデアに対するインプット/考え/提案はありますか?

P / S:本当にnode.jsに行く必要がありますか?jQueryのようなJSをホストするのは好きではないので、代わりに独自の関数を作成します。=)

4

2 に答える 2

1

Node.js はリアルタイム フレームワークとほぼ同義語になっていますが、他のテクノロジのソリューションもあります。PHP ソリューションについては、Ratchetをご覧ください。私がキュレートしているリアルタイム Web 技術ガイドで、他の言語のより詳細なリストを見つけることができます。

クライアントとサーバー間の永続的な接続をオフロードしたい場合は、私が働いているPusherなどのリアルタイムのホストされたサービスを見ることができます。あなたがそれをするなら、あなたはできる:

ライブラリを HTML に追加し、Pusher に接続します

<script src="http://js.pusher.com/1.12/pusher.min.js"></script>
<script>
  var pusher = new Pusher( 'YOUR_APP_KEY' );
  // Additional JavaScript - see below
</script>

SMS チャネルを購読する

var smsChannel = pusher.subscribe( 'sms' );

着信 SMS メッセージのチャネルのイベントにバインドする

smsChannel.bind( 'incoming', function(){} );

イベントを処理し、必要に応じてアプリを更新します

smsChannel.bind( 'incoming', function( smsData ) {
  var phoneNo = smsData[ 'PhoneNo' ];
  var msg = smsData[ 'Msg' ];
  // Update the UI as required.
} );

データベースを更新した後、サーバー上で Pusher を呼び出す必要があります。

プッシャー ライブラリを含める

// See: http://pusher.com/docs/server_libraries#php
require('Pusher.php');

PHP スクリプトへのリクエストを処理する

// I've had to guess a bit here. Hopefully you can convert this to something which meets your requirements/data structures 
$update = $_POST['sms_data'];

$query = sprintf("INSERT INTO updates (Phoneno, Msg) VALUES ('%s', '%s')",
  mysql_real_escape_string( $update['Phoneno'], $update['Msg'] ) );

$result = mysql_query($query);

if($result) {
  // trigger event
}

イベントをトリガーする

if( $result ) {
  // Use key, secret and id defined from config somewhere
  $pusher = new Pusher( PUSHER_APP_KEY, PUSHER_APP_SECRET, PUSHER_APP_ID);
  $data = array( 'Phoneno' => $update['Phoneno'], 'Msg' => $update['Msg'] );
  $pusher->trigger( 'sms', 'incoming', $data );
}

この例では Pusher を使用していますが、他のリアルタイム Web テクノロジでも同様のパターンに従うことができます。

自己ホスト型オプションを使用する場合は、サーバーがクライアントに新しい SMS を即座に通知できるようにする永続的な接続によって使用されるリソースを管理する必要があります。ホストされたサービスを使用する場合、これについて心配する必要はありません。

また、ここで達成しようとしていることと非常によく似たことを行う Pusher とTwilioの使用に関するチュートリアルも書きました。ただし、コードは Ruby です。参照: http://www.twilio.com/blog/2012/07/pusher-and-twilio-making-realtime-fuctionality-easy.html

于 2013-01-17T09:29:21.213 に答える
0

私は問題を理解しようとし、AJAX メソッドを選択したいが、新しい着信メッセージがあまり届かない場合の冗長性を恐れていることを分析しました。私が提案できることは次のとおりです。

タスクを 2 つの部分に分割します。一方のタスクは、新しいメッセージが到着したかどうかを確認する必要があります。

最初のタスクが true になった場合、ウィンドウを更新する 2 番目のタスクを実行します。

このようにして、冗長性が減少します。

ありがとう

于 2013-01-17T06:32:39.893 に答える