是否在线这个信息应该存储在服务器
用户A的浏览器每隔n秒发一个请求到服务器,服务器接收到了,就可以判断A在线
用户B请求与A对话,发现A的请求是m秒以前发过来的,如果m>n,那么A就离线,否则就是在线

解决方案 »

  1.   


    "用户B请求与A对话,发现A的请求是m秒以前发过来的,如果m>n,那么A就离线,否则就是在线"
       
        这一步如何实现,能具体在说下思路吗,如何获得m,n,如何比较.谢谢.
      

  2.   

    masse(当午 http://blog.sina.com.cn/xukf)
    是否在线这个信息应该存储在服务器
    用户A的浏览器每隔n秒发一个请求到服务器,服务器接收到了,就可以判断A在线
    ======================================
    这样就够了 
    当A超过n秒没有发送信息给服务器的时候 服务器就把A的状态设置为离开。
    服务器发送A的信息给B的时候 把A的状态告诉B就可以了。
      

  3.   

    可是我不清楚各位说的,
         “是否在线这个信息应该存储在服务器”
          “服务器就把A的状态设置为离开。服务器发送A的信息给B的时候 把A的状态告诉B就可以了。”
       如何在服务器设置存储和设置?
       我做的收发消息,是用ajax在浏览器端定时发送请求到服务器,不是服务器端推送信息到浏览器端。
       不知道以上两位朋友说的思路是如何实现,希望能说一下:如何在服务器设置存储和设置?
    谢谢各位的帮助/
      

  4.   

    也就是说每个游览器都要定时监听一下服务服务器端中application 中存的Vector,Vector里放着每个游览器发送的请求,用户是否离开的状态。然后游览器端定时用AJax请求循环判断Vector中的其他用户状态是否离开。并返回结果。显示在页面上。
      

  5.   

    现在考虑到了一个数据同步的安全的问题。
       我把所有的在/离线状态信息保存在vector中,然后把vector放到application中,在修改一个用户状态信息时,要重新构建vector,(从application中取出vector,然后循环vector,删除指定的信息,添加新信息。)但是,如果同时有两个用户取出application,就有可能发生先提交application的用户所构建的vector被后者代替。先前修改的信息不会变化。
       请高手朋友们指点指点。
      

  6.   

    这个问题和防止多点登录是一样的,无法严格做到。只能说对方的session还在的话,就算是他还在线。
      

  7.   

    谢谢这位朋友.
       还有个同步问题,
       Vector中保存了用户状态信息.如下
       id     state    lasttime
       001      'Y'    2007-07-10
       002      'N'    2007-08-06
       003      'Y'    2007-09-06
    Vector保存在application中.当001用户登录时,需要取出application中的Vector来修改vector中自己的信息,这是002也登陆,也要取出application中的Vector来修改vector中自己的信息,那么他们在修改后的Vector在保存到application中的时候,其中一个不就覆盖了另一个吗?(比如001先提交,002后提交,那么002修改的vector不就覆盖了001修改的吗,而001就还是002取出application是的状态)
        是不是我的设计有问题.想不到如何去解决.请各位朋友帮忙.
      

  8.   

    vector是线程安全的,还有vector实例只有一个,你每次取出的都是它的引用,你修改的是它的内部数据,你不用重复把vector保存在application中,所以不存在你说的这种覆盖问题。
      

  9.   

    其实都不这样web qq之类实现是pushlet技术实现
    具体去google pushlet或者利用flash xmlsocket建立 tcp长连接
    BTW,这两种方式都是可行的至于AJAX XMLHTTP嘛,呵呵,勉强了点.
      

  10.   

    当然,防止多点登陆还是利用SESSION MAP的好.
      

  11.   

    回复人:xlyyc(宇) ( 五级(中级)) 信誉:98  2007-09-07 11:10:57  得分:0

    其实都不这样web qq之类实现是pushlet技术实现
    具体去google pushlet-------------其实很少有这样。
      

  12.   

    不知道那些大型论坛的在线即时通讯都用得是什么方式实现的.
    在设计之前也曾看过push方式,但是障碍太多,就放弃了.
        其实我认为,用哪一中方式,要看系统的访问,数据量.
      

  13.   

    呵呵,视频聊天可不是这样的基本是xmlsocket + amf + fms