2012-05-01 11 views
4

私はC2DMを使用するアンドロイドアプリケーションを作成しています。ユーザーがサーバーに何らかのメッセージを送信すると、サーバーは送信者に返信し、そのメッセージをネットワーク内の他のユーザーのセットに転送します。PHPを使用してこのシナリオを実装するにはどうすればよいですか?

問題は、メッセージが他のすべてに転送されるまで、送信者への返信が遅れることです。これには多くの時間がかかります。返信を最初に送信者に送り返し、転送処理を実行します。どのように私はこれを達成することができます...?私は並列処理を使用することができます、私はPHPでそれを行うことができます...?非常に高く評価されるだろう:)

私はこのようなものを使用している、ここで

print(json_encode("Inserted Successfully"));//." ".count($tags))); 

while($row = mysql_fetch_row($result)) 
{ 
    $id = $row[0]; 
    sendMessageToUserID($id,"New Question !!",$ques_id,"yyyy"); 
} 

しかしが、「正常に挿入」任意のヘルプは、whileループが実行された後まで、送信者に送信されていません。

+0

を試してみてください。しかし、「一部のバージョンのMicrosoft Internet Explorerは、256バイトの出力を受け取った後にページを表示し始めるだけなので、フラッシュする前に空白を追加してページを表示する必要があります。背景のタスク(例:cronやある種の作業/メッセージ待ち行列)が遅い部分を非同期的に処理するようにするのが、より大きなアプローチのより良いアプローチです。 –

+0

私は上記のコードでprintステートメントの後にflush()を使ってみましたが、違いはありませんでした。私はcronの仕事がLinuxだけで動作すると聞いて、間違っていると私を照らします。他の方法はありますか? – Kishan

+1

すべてのOSには何らかのプロセススケジューリングがあります(例:http://stackoverflow.com/questions/132971/what-is-the-windows-version-of-cron –

答えて

6

これがうまくいくかどうかわかりませんが、Content-Length:Connection: closeヘッダーを追加して、明示的にフラッシング出力を試みることもできます。

EDIT: あなたが早期にバッファをフラッシュ強制しようとすることができ、この

ob_start(); 
//output 
header("Content-Length: ".ob_get_length()); 
header("Connection: close"); 
ob_end_flush(); 
//do other stuff 
+0

明示的に出力をフラッシュしますか?それがどうやって私をここに助けてくれるの? – Kishan

+0

[flush](http://www.php.net/manual/en/function.flush.php)を使用するか、Danが[ob_implicit_flush](http://www.php.net/manual/en/) function.ob-implicit-flush.php)。私が考えているのは、クライアントが一定量のデータを期待し、サーバーが接続を閉じるのを待つ必要がない場合です。 – Musa

+0

ええ、コード内のprintステートメントの後にflush()を使用しましたが、違いはありませんでした。遅延はまったく減少しませんでした。 – Kishan

2

Ob-Implicit-Flushこのトリックを行う必要があります。 :)

+0

)どうすればそれが助けになると思いますか?あなたはもっと正確になりますか? – Kishan

関連する問題