在我向他/她发送消息时,如何知道用户是否已离线?

时间:2011-10-06 09:09:24

标签: nginx comet

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

问题:

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

1 个答案:

答案 0 :(得分: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);

在这个示例中,var $ r包含:排队的消息:0最后请求:4秒。之前(-1 =从不)活跃订阅者:1

你可以看到,它还包含许多订阅者