2011-10-06 5 views
0

저는 Comet 기술을 기반으로 한 채팅을 만들고 있는데,이 문제에 봉착했습니다. 그래서 혜성의 경우, 나는 ningx푸시 모듈을 사용하고 있습니다. 모든 것이 잘 작동합니다. 전담 채널을 통해 다른 사용자에게 메시지를 보낼 수 있습니다. 그러나 문제는 내가 그 메시지를 받기 전에 오프라인으로 간 사용자에게 보낸 메시지가 어떻게 될지 생각하기 시작했을 때 나타났습니다. 메시지를 채널로 밀어 넣기 전에 수신기가 여전히 해당 채널을 듣고 있는지 확인하고 싶습니다. 그렇다면, 나는 단지 메시지를 밀어 넣을 것이다. 나는 메시지를 데이터베이스에 저장하여 온라인 상태 일 때 사용자가 읽을 수 있도록하고 싶다.내가 메시지를 보낼 때 사용자가 이미 오프라인 상태인지 어떻게 알 수 있습니까?

질문 :

  1. 특정 채널이 현재 (nginx를 푸시 모듈) 적어도 하나의 가입자가있는 경우 어떻게 든 확인할 수 있나요? 불가능할 경우 메시지를 보낸 사용자가 온라인 상태인지 확실히 알 수있는 방법은 무엇입니까? (마지막 활동이 도움이되지 않습니다. 사용자가 메시지를 받기 전에 1 초가 지나면 사용자가 오프라인 상태가되지 않았 음을 확신 할 수 없습니다.)

고마워요!

답변

1

나는 내 자신의 질문에 대답했습니다. 다음은 메시지를 게시하는 데 사용하는 코드와 게시 후 유용한 정보를 얻는 방법입니다. 이 예제 var에 $의 연구에서

$channel_id = 'c'.$_POST['uid']; 

$message['sender']=$_SESSION['user.ID']; 
$message['firstname']=$_SESSION['user.firstname']; 
$message['message']=$_POST['msg']; 
$message['type']='chat'; 

$c = curl_init('http://192.168.56.101/publish?cid='.$channel_id); 
curl_setopt($c, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($c, CURLOPT_POST, true); 
curl_setopt($c, CURLOPT_POSTFIELDS, 'pre('.json_encode($message).')'); 
$r = curl_exec($c); 

이 포함되어 있습니다 마지막 요청 0 : 4 초 메시지를 대기. 전 (-1 = 안 함) 활성 가입자 : 1

으로 볼 수 있듯이 구독자 수가 많습니다.

관련 문제