有个问题一直没搞懂,就是用户在线状态是怎么判断的,比如客户端退出,如果正常退出还好理解,如果是异常退出,比如死机,断网的话,openfire server是如何得知客户端已经离线,并更新用户状态的呢?

解决方案 »

  1.   

    对的,这个我了解,只是想弄清楚,难道openfire server里面一直有个轮训在判断没有响应的客户端么?我想肯定有个机制来保证这个的吧?
      

  2.   

    ok
    那意思就是说,如果客户端是异常退出的话,如果server一直没给他发消息,那么他会一直显示在线状态?难道QQ,MSN也是这样的情况么?
      

  3.   

    我刚做了一个简单是实验,验证了一下MSN:
    如果直接拔网线,另外一端确实还是一直在显示在线状态,直到给他发送消息为止;
    如果正常退出,10秒左右就自动显示离线了。貌似好像内部的确没有其他的机制来判断,有时间再实验一下QQ吧
      

  4.   


    还是有判断的,不然你正常点退出什么的,服务器也没法判断了;
    任何一个登陆的用户在服务器上都有一个唯一的标识,比如session;正常退出就要在程序中释放session;
    非正常情况下,用户已经不在,session还在;
    服务器每过一段时间会检测session有效性,比如说20分钟没有活动请求的用户,就自动释放session;到那时该用用户才正式下线;