1

私はチャットのようなアプリケーションを開発しています。サーバーは PHP で記述し、クライアントはデータをリッスンするだけのパッシブなものにする必要があります。

今、私は send.php と server.php の 2 つのスクリプトから始めたいと思っています。

send.php は、GET インターフェイスを介して別のクライアントにメッセージを送信するための REST API を提供します。

server.php は、ソケットを介してデータを送信するために、クライアントからの接続を受け入れる TCP サーバーである必要があり、現在はhttp://php.net/manual/en/sockets.examples.phpに基づいているため、現在はクライアントのみ彼に接続すると、彼はテスト文字列を送り返します。

私の問題は、メッセージがsend.phpを介してプッシュされたときにserver.phpが実際に送信するように、send.phpとserver.phpを何らかの方法で接続する必要があることです。

それ、どうやったら出来るの?

私が推測する 1 つのオプションは、プッシュされたメッセージをサーバー ストアに保存し、server.php で新しいメッセージをチェックすることですが、リソースを消費しすぎるのではないかと心配しています。

4

1 に答える 1

0

解決策 1.

私は最初に提案した方法で問題を解決しました。つまり、server.phpをアクティブにして、毎秒新しい情報をチェックします。

function getNewMessages()
{
    $arrOfMessages = array();
    $selectQuery = "SELECT * FROM messages WHERE unread=1";
    $result = mysql_query($selectQuery);
    return $arrOfMessages;
}

if(count($newMessages) > 0)
{ ... } 

1 秒に 1 回 SELECT を実行するのは大したことではないことを認識してください。

解決策 2。

私が推測する別のアプローチは次のようになります。

  • server.php はクライアント IP に関するデータを受け取り、それをユーザー セッションにバインドします。
  • データベースに保存します。send.php は、クライアントとの新しい接続を開き、メッセージを送信します。

この方法では、メッセージは送信者クライアントによって REST インターフェイス経由で「送信」された直後にクライアントに送信され、チェック ループはどこでも実行されません。server.php (このソリューションではタイトルが誤解を招きます) を作成して、REST インターフェイス経由で IP を受け入れることもできるため、追加の TCP/UDP 接続は必要ありません。

解決策 3。

今日の多くのクライアント (iOS など) にはプッシュ通知システムがあり、クライアントが 1 日にあまり多くのメッセージを受信しない場合、これを行う最善の方法は、プッシュ通知を介してメッセージを配信することです。この方法では、低レベルのネットワーク接続を使用する必要がなく、REST インターフェイスで十分です。

于 2012-08-24T05:49:21.560 に答える