To flydragon
这个好实现!我做社区做过。建张表,叫消息表,每个用户登进去,做次检查就是了。
浏览器客户端的失时通讯不知道怎么实现?c/s的client端可以用时间间隔控制事件来实现失时
检查事件,而浏览器怎么做?能实现吗?不要那个refresh content=10,在Chinaren上的消息
<a href="http://message.chinaren.com/read.php3"><img src="http://message.chinaren.com/checkmsg.php3" width=60 height=12 border=0></a>
也不能做到实时检查,只有每次登陆或刷新才能检测新消息。

解决方案 »

  1.   

    我现在就是要不刷新就弹出窗口的
    你上过www.the9.com吗?那上面的消息就是实时弹出的,不论你在它的那张页面上。
    还有一个你可以看看www.playease.com中的千里传音也是有消息马上弹出
    还有个问题:关于session失效的问题,鉴于http的无状态,在用户不正常退出的时候怎么从在线名单中删除此用户,做在线统计的时候,统计相对准确的在线人数,你做过社区,这个你应该是妹什么问题吧
      

  2.   

    弹出消息,可以在客户端作一个java applet,启动一个socket监听;当服务器端需要
    发消息给客户端时,用socket连上,发送就是了。
    session失效,看你怎么具体做。原理是超时,如果一个家伙15分钟不动,
    就认为他是掉线了。
      

  3.   

    是一个对java applet的引用代码;类似于每页都放一个java script或者meta的自动刷新那样;
    你可以写一个msgreceiver.php,然后每页都require("msgreceiver.php");当一个客户发消息时,服务器帮他转发给另外的客户;
    如果希望直接通过tcp/ip在两个客户端直接通讯,通过web应该做不到。除非你要求用户降低
    客户端的浏览器的安全设置。
      

  4.   

    你好啊
    首先谢谢你的积极帮助,但是我还是不知怎么实现.要是你实现过的话能将代码email给我吗?我的add:[email protected],非常感谢100点,怎么样?要是没有的话,能说得再详细点吗?
      

  5.   

    首先声明,下面的办法没有考虑proxy和ip转换过的用户的情况;最基本的要会写java applet,在applet里面用ServerSocket监听:
    import java.net.*;
    ....
    ServerSocket server:=new ServerSocket(...参数不太记得了..);
    Socket s=null;
    while (true)
    {
      s=server.accept();//阻塞等待连接请求;
      processIt(s); //处理请求
    }在processIt方法里面执行一个接受消息和弹出窗口的操作;
    这是客户端的基本原理;服务器端
    首先,用户登录时记录他的IP地址;
    其次,一个用户发消息给另外一个用户时,取出目标用户的ip地址,然后创建socket连接,
    把消息传过去;当然也要保存在数据库里面。
    上述办法不能对付有防火强或者ip转换的情况;如果要能对方,客户端就不是启动监听,而是
    和服务器建立socket连接:
    import java.net.*;
    import java.io.*;
    .....
    Socket s=new Socket(...参数还是忘记了);//和服务器建立连接;
    InputStream = s.getInputStream();//类似php了
    后面就是读这个stream了,好久不用java不大记得了;不过这样做要小心,因为每个客户要和服务器有一个持续连接的。也许有更好的办法。大家一块想想巴。
      

  6.   

    那在局域网中的用户不能相互发了?客户端能用ServerSocket嘛?
      

  7.   

    感谢各位,不过据说server push是ie不支持的
    现在用得很少
    我只好用了一种很笨,很耗资源的方式
    定时刷新
    哎]
    没办法