2012-05-01 7 views
4

나는 C2DM을 사용하는 안드로이드 응용 프로그램을 쓰고 있습니다. 사용자가 서버에 메시지를 보내면 서버는 보낸 사람에게 다시 응답하고 그 메시지를 네트워크의 다른 사용자 집합에 전달합니다.PHP를 사용하여이 시나리오를 어떻게 구현합니까?

문제는 메시지가 다른 모든 사람에게 전달 될 때까지 보낸 사람에게 회신이 지연된다는 것입니다. 이것은 많은 시간을 필요로합니다. 회신을 보낸 사람에게 먼저 보내고 전달 프로세스를 수행하기를 원합니다. 어떻게 이걸 얻을 수 있니? 병렬 처리를 사용할 수 있다면 PHP에서 어떻게 처리 할 수 ​​있습니까? 어떤 도움은 매우 while 루프가 실행될 때까지, 보낸 사람에게 전송되지 않습니다 "성공적으로 삽입"여기, 나는 이런 식으로 뭔가를 사용했다

:

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

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

감사하지만 될 것이다.

+0

당신은 초기 버퍼를 플러시 강제로 시도 할 수 있습니다하려고합니다. 그러나 'Microsoft Internet Explorer의 일부 버전은 256 바이트 출력을받은 후에 페이지를 표시하기 시작하므로 플러시하기 전에 여분의 공백을 보내야 브라우저에 페이지를 표시 할 수 있습니다.' 좀 더 웅장한 계획에서 더 나은 접근법은 배경 작업 (예 : cron 또는 일종의 작업/메시지 대기열)이 느린 부분을 비동기 적으로 처리하도록하는 것입니다. –

+0

위의 코드에서 print 문 다음에 flush()를 사용했지만 아무런 차이가 없었습니다. 나는 cron 작업이 리눅스에서만 작동하고, 내가 틀렸다면 나를 비추는다고 들었다. 다른 방법이 있습니까? – Kishan

+1

모든 OS에는 일종의 프로세스 스케줄링이 있습니다. 예 : http://stackoverflow.com/questions/132971/what-is-the-windows-version-of-cron –

답변

6

이것이 작동하는지는 잘 모르겠지만 Content-Length:Connection: close 헤더를 추가하고 물론 출력을 명시 적으로 플러시 할 수도 있습니다.

편집 : 이

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/ko/)를 추천 한 것과 같이 사용할 수 있습니다. function.ob-implicit-flush.php). 내가 생각하는 것은 클라이언트가 일정량의 데이터를 예상하고 서버가 연결을 종료 할 때까지 기다릴 필요가 없다는 것입니다. – Musa

+0

그래, 코드에서 print 문 뒤에 flush()를 사용했지만 아무런 차이가 없었다. 지연은 전혀 감소하지 않았습니다. – Kishan

2

Ob-Implicit-Flush 트릭을해야합니다. :)

+0

어떻게하면 도움이 될 것이라고 생각합니까? 좀 더 정확해질 수 있니? " – Kishan

관련 문제