phpでサーババックグラウンドのandroidインスタント通信appを開発する実現構想


初心者としてのミスは避けられないので、ご指摘をお願いします.
インスタント通信は、一般的にTCP/IPプロトコルまたはUDPプロトコルを用いて通信されるが、いずれも端末ipアドレスの決定に関与し、PCにとってipアドレスは容易に決定されるが、android携帯電話端末ipアドレスは容易に決定されず、上記2つのプロトコルは適切ではない.httpプロトコルを使用して通信できます.各ユーザーはサーバに要求を送信します.要求には、ユーザーがメッセージを送信した場合、このhttpリクエストには、リクエストのタイプ(送信メッセージ)メッセージの送信者、メッセージの受信者、メッセージの内容、メッセージの時間などの属性が含まれるべきであり、サーバはデータベースに関する操作を行い、メッセージをデータベースに挿入する.ユーザーが新しいメッセージを受信する場合、httpリクエストにはリクエストのタイプが含まれるべきである(メッセージを受信する)、ユーザーなどの属性、サーバに提供し、サーバはデータベースを取得し、そのユーザーが受信する新しいメッセージを見つけ、メッセージを返します.
あるユーザクライアントは、他のユーザがいつメッセージを送信するか分からないため、インスタントメッセージの受信を実現するには、1秒ごと、0.1秒ごとに要求を送信し、サーバがデータベース検索操作を行い、新しいメッセージを探し、戻って接続を切断することを「ポーリング」と呼びます.これにより、ほぼ即時に達することが保証されるが、頻繁にサーバに要求を送信する必要があり、httpリンクを絶えず作成する必要があるため、サーバに対する圧力が大きい.もう1つはhttp長リンクに基づいて、クライアントがメッセージを受信するhttpリクエストを送信し、サーバがデータベースをクエリーする操作を行うが、この場合は1回のクエリーではなく、1サイクルでクエリーを継続し、新しいメッセージをクエリーするまで、または最長接続時間に達して接続を切断するまで(新しいメッセージがある場合は、新しいメッセージを返して切断する)、ループ内にdelayを設定し、クエリー・データベースの頻度を調整することで、httpリンクの頻繁な確立のオーバーヘッドを回避できます.
次はいくつかの具体的な問題です.
新しいメッセージであるかどうかを確認する方法.1つは、データベースにメッセージを保存するテーブルにis_を追加することです.newのフィールドは、デフォルトで1です.メッセージの受信者がメッセージを受信すると(httpリクエストを送信して新しいメッセージを取得する場合、サーバは新しいメッセージ検索データベースを問合せ、このレコードを取得する場合)、そのレコードのis_new属性を0に更新し、新しいメッセージを要求するときにサーバがそのユーザの新しいメッセージがあるかどうかを問い合わせるときにクエリが同時に満たさなければならない条件の1つがis_new=1である.もう1つは、時間を借りて、各メッセージのレコードに1つの表示があるメッセージ時間のフィールドです.値はunixタイムスタンプです.新しいメッセージをクエリーするリクエストが完了するたびに、サーバが返すコンテンツには、その時点が含まれています.(unixタイムスタンプ)、クライアントは戻りデータを受け取り、そこからこの時間を取得し、ローカルに保存します.例えば、データベースのテーブルに保存されます.要求されるたびにこの時間を送信し、サーバに提供します.サーバはこの時間属性を利用して、データベース内のメッセージが新しいかどうかを取得します.メッセージの時間属性値がクライアントから送られてきた時間値より大きい場合に新しいメッセージになります..
携帯電話側はどのようにデータをサーバーに送信し、サーバーはどのようにデータを受信しますか.サードパーティjarパッケージhttpclientを借りることができます.具体的にはhttp://blog.csdn.net/giantpoplar/article/details/38685817
携帯端末からhttpリクエストが送信された場合,サーバはリクエストを受信した後の操作を行う.
$MAX_TIME = 600;
$DELAY_SECOND = 1;
set_time_limit ($MAX_TIME);
$result_array 	= array();
$got_message = false ;
$start_time = time();
$execute_time	=	0;
while (!$got_message && $execute_time <= $MAX_TIME && connection_status () == CONNECTION_NORMAL ) {
	sleep ($DELAY_SECOND); 
	if(get_query_resylt()){
			$result_array = append_array($result_array);
			$got_message = true;
	}
	$execute_time = time () - $start_time;
}
$json_str = json_encode($result_array);
echo $json_str;