2011-10-06 41 views
0

我正在建立一个基于Comet技术的聊天工具,我被这个问题困住了。所以,对于彗星,我使用ningx与它的推模块。一切正常。我可以通过专用渠道将消息发送给其他用户。但是,当我开始思考在发送给在收到该消息之前下线的用户的消息后会发生什么情况时出现问题。 我希望在将消息推入频道之前检查接收器是否仍在监听该频道。如果是这样,我只会推送消息,否则我只想将消息放入数据库,以便用户在他/她在线时可以阅读它。如何在我向他/她发送消息的时候知道用户是否已脱机?

问题:

  1. 我可以检查以某种方式,如果一个特定的信道目前具有至少一个订户(对于nginx的推送模块)?如果不可能,那么如何确定发送消息的用户是否在线? (最后的活动不会帮助,因为不可能确保用户在他/她应该收到消息之前没有下线1秒)

谢谢!

回答

1

我已经回答了我自己的问题。这里是我用来发布消息的代码,以及我在发布消息后如何获得有用的信息。

$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); 
在该示例变种$ R

包含此:排队的消息:0最后请求:4秒。前(-1 =从不)活跃用户:1

正如你所看到的,它也包含一些订户

相关问题