【问题标题】:How to know if an user is offline already by the time I send him/her a message?在我向他/她发送消息时如何知道用户是否已经离线?
【发布时间】:2011-10-06 09:09:23
【问题描述】:

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

问题:

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

谢谢!

【问题讨论】:

    标签: nginx comet


    【解决方案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

    如您所见,它还包含许多订阅者

    【讨论】:

      猜你喜欢
      • 2020-10-24
      • 1970-01-01
      • 2017-08-12
      • 1970-01-01
      • 2010-10-16
      • 1970-01-01
      • 2014-07-14
      • 2010-10-01
      • 2016-04-24
      相关资源
      最近更新 更多