ICQ 的WEB页面,也有这功能

解决方案 »

  1.   

    是和GoogleTalk完美结合的,比较喜欢。
      

  2.   

    客户端发出请求。服务端返回header声明这是一个不断开的连接,并一直保持连接状态。所以服务端可以直接发送消息到客户端不用重新连接。
      

  3.   

    但我试过两个人测试, 他一开始用键盘输入, 我这边马上可以知道他在输入状态, 时间不到1秒,而且我一直在查看CPU占用很少, 所以感觉不像是客户端主动请求,如果是客户端请求的原理,好就应该是当一方按下键盘时马上发送状态上服务保存,而另一方要不停的请求这个状态, 如果这样速度应该没有这么快的吧
      

  4.   


    web能够实现server push?
    个人认为是采用了组件,纯粹的js或者服务器编程是不能实现server push的
      

  5.   

    server push是老技术了。单用php都可以实现。你在网上随便搜。现在都有纯php的serverpush服务器。我也实现过。
      

  6.   

    Gdj(陈水.智商只有129.非卖品)
    服务端推动不知怎样实现,要支持IE的
      

  7.   

    serverpush有一个特点就是页面好像永远下载不完。Gmail没有这种现象。
      

  8.   

    服务器的推技术好像IE不支持, 不知那位有这方面更多的资料,我看google可能不是用传统的推技术,因为单纯的服务器推技术会占用服务器的很多资源,特别是服务的端口,以GOOGLE的用户数,我想没有什么服务器够端口用
      

  9.   

    MSN也有这个功能吧` 对方输入信息时 能够知道对方在输入消息
      

  10.   

    MSN 是一个软件,可以做到P2P,实现应该不算太难, 但在网页上实现难度 就大很多了
      

  11.   

    YidingHe(机枪兵) ( ) 信誉:100 
    serverpush有一个特点就是页面好像永远下载不完。Gmail没有这种现象---------------------------------
    serverpush的页面用ajax来实现不就没现象了吗。
    不过没试过。感觉没必要。下载不完就下载不完呗。
      

  12.   

    serverpush一般用c来实现的(仅服务端需要用c,不用写组件)。纯js不可能实现。
      

  13.   

    我试过用ASP的flush来模拟测试AJAX,不行的, AJAX一定要等页面全部完成才行
      

  14.   

    YidingHe(机枪兵) ( ) 信誉:100 
    serverpush有一个特点就是页面好像永远下载不完。Gmail没有这种现象---------------------------------
    serverpush的页面用ajax来实现不就没现象了吗。
    不过没试过。感觉没必要。下载不完就下载不完呗。
    ------------------------------------------------
    如果用户按下工具条的停止就不行了
      

  15.   

    想了一下,ajax应该可以做到这种效果,方法如下
    服务器维护这样一张表
    用户ID | 用户是否在线 | 用户是否在输入 | 输入的发送对象的用户ID
    当用户开始输入或输入框onchange时,向服务器提交更新自身状态异步请求,不用管返回。
    当用户关闭输入或发送时向服务器提交更新自身状态异步请求,如果是发送,检查服务器是否返回发送成功/失败等信息,如是关闭,则不用管返回
    如用户长时间没有提交任何请求,则服务器自动将用户是否在输入改为否。每个在线用户,每隔1秒,向服务器提交一个查询好友当前状态的异步请求,服务器一返回即用更新当前页面上好友之状态。
    现在没空,改天写代码试试。
      

  16.   

    楼上的应该是可以实现 , 不过效果应该会差很远, 不知GOOGLE用的是什么技术?
      

  17.   

    server :push.php , state.phpclient 1  : a.htmlclient 2  : a.htmlc1每隔1秒请求服务器 state.php  c2每隔1秒请求 push.php请求都用ajax请求。----------
    Gdj(陈水.智商只有129.非卖品)你是这么做的吗?
      

  18.   

    当然不是这样做。每隔一秒发起一次连接那还叫serverpush哪?
    做serverpush需要自己写一个简单的服务端(不能用iis or apache之类的)。客户只要发起第一次连接,以后就都是服务端控制了。
    php支持socket函数,所以也可以做。不过效率就差了点。
      

  19.   

    To: hansonboy(良) ( ) 信誉:95  2006-05-18 09:01:00  得分: 0  
     
       “楼上的应该是可以实现 , 不过效果应该会差很远, 不知GOOGLE用的是什么技术?”
     --------------------- 
     虽然我没有去编码测试,不过你想想按我的设想,会有多大的数据流量?估计都不会超过1k,只要服务器不卡,反映时间不会超过1秒的。不过要想象GMail一样支持庞大的客户群的话,自然也要有不亚于它的服务器群集啊。
      

  20.   

    要知道每发起一次连接都服务器资源都是一个巨大的浪费。因为你每次都得重新发送文件头,加载类库,查询数据库。假设你的页面执行时间需要0.03秒(大多数执行有数据库操作的页面都在这个时间)。每秒查询一次,那意味着你的服务器只能支持同时1/0.03=33在线。而serverpush服务器是支持上千人同时在线的。而且ajax聊天室的反应时间还是要一秒,和serverpush的即时性根本没得比。
      

  21.   

    用工具测试过,上了GMAIL后确实是一直连接住的, 没有断开,
    现在服务器我叫人用C来实现,现在主要是客户端怎样才不会被被动断开, 因为用户一按下浏览器的停止按钮后就会断开了和服务的连接, 这样服务怎样做也不起作用了
      

  22.   

    To Gdj(陈水.智商只有129.非卖品) 
    假设你的页面执行时间需要0.03秒,每秒查询一次,那意味着你的服务器只能支持同时1/0.03=33在线。
    ---------
    这是服务器吗?每一个客户请求页面都必须等前一个客户请求页面结束?
    超强的并发能力,分布式处理,计算机群集。。这才叫好的服务器,不过就是很普通的那种单机,也有一定的并发处理能力,决无可能每一个客户请求页面都必须等前一个客户请求页面结束。那样像门户网站、搜索引擎之类的站点早瘫掉了。
      

  23.   

    To hansonboy(良) ( ) 信誉:95  2006-05-18 12:59:00  得分: 0  
    用工具测试过,上了GMAIL后确实是一直连接住的, 没有断开,
    现在服务器我叫人用C来实现,现在主要是客户端怎样才不会被被动断开, 因为用户一按下浏览器的停止按钮后就会断开了和服务的连接, 这样服务怎样做也不起作用了
    -----------
    断开也没关系的,你短暂的拔一下网线,再插上,gmail还是正常工作的,b/s的连接要设得弱一点,要不然怎么维护在线状态。
      

  24.   

    gana_chu() 
    ----------------------
    听你口气,这么说来你的服务器能支撑每秒打开上千个非静态页面了?一个客户请求的确是不必等别的客户结束。但他占用的时间是必要的。如果同一时间超过你服务器能支撑的连接数,而你没做连接数限制的话,结果是每个页面的时间都变长。不可能说每个页占用0.03的cpu。一百个页同时访问还是占0.03。我说的这个时间是一个估计值。门户网站?搜索引擎?你还懂得说他们是一个群集。这样说了,这一个聊天室,你愿意用一台serverpush服务器还是愿意用一个50台服务器群集做的ajax聊天室?
      

  25.   

    ajax聊天室
    不管有没有人聊天,每个在线人员每秒都会发起一次tcp连接,发送和接收数k的文件头、htm等内容,并查询数据库有无新发言。serverpush聊天室
    无发言时,每个在线人员只消耗tcp连接协议的数个字节(时间长短视你设的超时长短而定)。每一个人发言,只需要发送发言的字节数。整个过程不需要连接数据库或是在服务器上用内存保存发言内容。很明显看出两者的差别
    无发言时带宽消耗 ajax:几k/每秒 | serverpush:几字节/几十秒
    服务器资源消耗 ajax:保存一段时间内发言所需要的内存/数据库消耗 | serverpush:几乎无消耗。
      

  26.   

    To Gdj(陈水.智商只有129.非卖品) 
    假设你的页面执行时间需要0.03秒,每秒查询一次,那意味着你的服务器只能支持同时1/0.03=33在线。
    --------
    我就只引用了这一句话,也就是说只是说这句有问题,并非说serverpush比ajax差。
    尤其是你用了“只能支持同时1/0.03=33在线”,你好好想想,或者找任一个程序员来看看,这句话几乎是明白表达了“每一个客户请求页面都必须等前一个客户请求页面结束”的意思,我不是文字工作者,所以不是说你的语法问题,而是你的表达,太不够严谨了!
    再看看你的回复“听你口气,这么说来你的服务器能支撑每秒打开上千个非静态页面了?”
    晕啊,我有这么说过吗?只要我的服务器能支撑每秒打开66个非静态页面就可以100%的从实际上推翻你的关于“1/0.03=33”的论断了吧。有这么离谱的估计值吗?
    接下来的回复我不想评价了,如果你坚持你说得没错,那我也不会再回复。
      

  27.   

    再说两句关于用词严谨的话
    我是觉得搞技术的人,在谈论技术的时候,用词应该尽量的严谨,不能确定的事,就不要说得那么肯定,起码有“估计、个人认为”之类的字眼,让别人一看就知道,喔,这个只是个参考值,不会误导别人。从数量上来说,你提供的参考值差个百分之一二,如果不是精密度要求很高的应用,倒也无所谓,如果相差百分之五十、百分之一百以上,你觉得还有作参考的价值吗?
    象这么几个例子:
    “每秒打开上千个非静态页面”到“1/0.03=33在线”再到“一百个页同时访问还是占0.03”
    把单位都换算成 “每秒打开页面数”,三者相差过万倍,用这么极端的值来作对比,这哪是讨论技术的态度?根本是找别扭嘛。“无发言时带宽消耗 ajax:几k/每秒 ”,知道这个值与实际又差了多少?
    “几k”最少最少也表示2k吧?实际上无发言时,你只告诉服务器你还在就行了,只要http头+接口名称+你的id就够了(而且接口名称+你的id都有办法省到几个字节的程度),可以说约等于http头的长度。而服务器端返回的时候,如果对话都记录在数据库里,是会多一个数据查询的操作,但是,这个只是占用服务器资源而不会占用“带宽消耗”,所以也只要返回一个头加几个字节就行了,做得好,一个请求+返回绝不会超过1k的数据量,那么与论断相比就有超过100%的差距。
    ps:不好意思,又引用楼上的话,只是因为一抬头,就看到了,懒得再想个例子出来。
      

  28.   

    不能确定的事就别说?
    我的机器能支撑ajax 33人在线不变慢,serverpush 1千人在线。你的机器要有不同,能一千人ajax在线,那就自己算serverpush几人在线就是了。要不要每说一个值都同时报一遍自己服务器的配置呀?研究几k最少表示2k你去学语文得了。我只是就通常网站平均的文件头报个数而已。你要研究极端情况是你的自己。请不要把这当成语病。
      

  29.   

    google也是每隔一段时间访问一下服务器啦
    不是什么server push
      

  30.   

    就聊天室来说。serverpush的性能比ajax高几十上百倍是板上钉钉的事。两者根本没有可比性。至于我说的一个网页需要多少时间。我也不认为有什么语病。只是你地方的语言习惯和我这边不同而已。就象说一个人吃饭需要10分钟。他吃了一半跑去看球了,回来继续吃。按我这边的习惯,他吃饭花了2小时,可吃饭还是只需要10分钟。你们那边的习惯估计就是说他吃饭需要2小时吧。我们这边需要多少时间,和花了多少时间是不同的意思。