关键是服务端怎么及时更新消息给客户端,传统http都是客户端请求->服务端应答的。lz是要达到服务端“推”给客户端的效果?坐等高人~

解决方案 »

  1.   

    其实不是很难,我用了2周左右完善了这个效果。
    用serverpush实现。具体做法就是自己写一个web服务。
      

  2.   

    http://www.rednetcn.com/Article/Article.asp?ArticleID=3424两个星的就是不一样啊~
      

  3.   

    客户端可以使用 Flash 的Socket 通信,用js给转出来 (例如aflax)
    服务端得另写一个 ServerPHP 虽然可以当Socket Server 但在一个时刻只能处理一个连接
      

  4.   

    今天研究了一,看了一些聊天室方面的,但是没有源码供参考,其中有ichat,还有一些聊天室,他们都是用C写的一些逻辑,由于看不到源码,不好研究,还有有经验的人进来讨论一下吗?分不是问题,希望空上贴子能把这个问题给讨论清晰.
      

  5.   

    不需要任何标识。完全正常的HTML和header。要做的只是不间断传输。
      

  6.   

    你好,我现在在这公司刚上班,我们就是做这方面的  http://www.vqq.com/
    他们是用c,c++重写了apache服务器,也就是那个server改了
    客户端一旦连接上服务器,就不断开了,服务器端一旦有数据更新,就向各客户端发送,没有则不发送
    由于我是做php的,接触不到那底层,这些也只是了解点点而已,呵呵举个例子:
    某个人在一端把他的一个好友加入黑名单,那对方马上就会收到信息说他已经被加入黑名单了,我看了代码,根本不是ajax聊天室
      

  7.   

    谢谢楼上的回答,你的回复也对我很有用处,希望还有更多的高手投入进来。因为我以前也是用的AJAX实现的聊天室,那种效率我也知道,顶个50人已经是很了不起了,所以想研究一下这方面的东西,尽管现在公司决定用C/S来实现了,但是我还是想把它作为一种兴趣爱好来研究,目前我只能加到200分,现在好像是加不了,说没有过5天什么的,但是到时候肯定会加上去,不管这个贴到时候讨论到什么程度。
      

  8.   

    我想了一种方案:
    主页面中有2个隐藏框架用来做数据传递.
    而这个数据页面一直被服务器端刷数据.
    刷的数据就是对应的脚本,
    执行动作的脚本.比如提示或显示内容.
    刷新的时候,要一次一块,这样浏览器就会接收完一块,就立即执行对应块.另外还有一个提交用的隐藏框架,
    用于输入后提交数据.
    这样基本上是web服务器的最大并发访问量就是最大用户数了.
      

  9.   

    楼上的,你说的也不失为一种方法,但是这样的提交刷新处理,还不如用AJAX,这种形式,我在早期用AJAX实现过,但是那样的做法,我认为算法处理得再好顶多也就只能够承受50人,所以我才想到用服务器推技术。不过这里全是学PHP的,虽然我也懂一点C,但是基本上也帮不上什么忙,毕竟没有很深入的去了解它,目前一有一个难点,就是即使是可以用C写的中间程序,服务器是和客户端一直连接着,但是一个用户发送消息后,怎么才能让服务器发给另一个用户呢?(另一个用户用的是浏览器),是否浏览器中有一个唯一的编号什么的被服务器所记录了?希望版主级的人也进来发表一下意见。
      

  10.   

    就是用ajax实现的,你自己实现的只支持50人那是你代码或者思路不够好,不是这种技术行不行的原因。
    web,本来就是适合多请求大并发的,这是web的特长之处,你没有必要扬短避长!
      

  11.   

    ajax不行……web的大并发是相对而言的。一个apache的并发占用为1~4M内存。一个web服除掉必要开稍外还有多少内存供你挥霍的?内存还只是一方面,另外CPU和带宽的消耗也很严重。50人是说得少了点,但肯定达不到serverpush的1/10。10倍的成本可不是说笑。
      

  12.   

    因为是一直连着的,可以给这个连接一个ID的吧?
    10个人连进来就有10个ID 啊
      

  13.   

    想用PHP来实现,基本上不可能,因为HTTP协议无法建立持续连接;
    它只能使用 GET POST HEAD OPTION 等方法来发送/接收一次数据,而不能进行数据交互;
    可以使用FLASH里的SOCKET通信来连接服务器,用外部JS来调配页面文字显示
    用 aflax 做,有现成的Flash代码 ( aflax.org ) 不过服务器端还得自己写
      

  14.   

    用PHP实现可以。PHP支持socket。不过运行这种精打细算的东西,PHP的执行效率低了点。不建议用纯PHP实现。
      

  15.   

    感谢大家参与,个人前面用AJAX实现,之所以说它不行,是因为,你得设置它刷新的时候,也就是隔多少时间提交一次,这个时间是可以设置的,当然如果设置为十秒钟刷新一次,那肯定是可以承受多余50人的,但是可能大家也想到了,那样太不即时,别人发个消息,你得好几秒才能看到,跟服务器推技术比起来可以说是差多了,因为里面还涉及到了查询数据库,因为每一个请求,你都得查一次数据库看是否有新的消息,那样给服务器带来了多余的负担。
    对于26楼 zjstandup 的看法,我认为的是,126可以用推技术,也可以用AJAX,因为毕竟邮件不像聊天,它迟一些时间是可以容忍的,对于隔几十秒保存一次的看法,我想那应该是用AJAX来实现的,服务器推只是单纯的从服务器发数据到客户端,而保存是把客户端的数据放到服务器,所以说那是AJAX实现。个人现在已经在研究Jabber方面的代码了,也是这几天接触的,其它也根本不是很了解它,以前只是用C#之类的写过这方面的通讯,希望能有点成绩了。
      

  16.   

    从 HTTP 协议本身来讲是不可能实现 Server Push 的,这是协议所限制的。
    不过我看 Java 好像有 Server Push,但感觉 HTTP 协议还是不适合做这种东西。
      

  17.   

    不间断传输,在浏览器上会看到进度条,Gmail肯定不是这么做的,ajax完全可以达到gmail的效果。只要你的服务器够强劲。
      

  18.   

    楼上的说的也是,所以公司现在把方案改成CS了,但是我看过国内一些聊天室,他们好象都是使用的Server push.不过让我不明白的是那个负责处理消息的C程序怎么处理两方的消息。到时候可能得相应的在C版块里面发一次了。
      

  19.   

    就是用ajax,上面说的并发是什么?
    你没有看见这些门户网站的访问量吗?
    光web服务器适合并发不行,你的程序也要适合并发!
      

  20.   

    楼上说的不错,退一步说 Google 使用的 Web 服务器也是 Google 自己开发的 Google Web Server,加上强大的服务器群做后盾,不怕大访问量。
      

  21.   

    用 HTTP 协议来时时传输数据肯定不合算
    因为它根据浏览器不同,发出太多你在聊天时不需要的信息了你的请求基本上要发这样的数据到服务器:
    GET / HTTP/1.1
    Accept: */*
    Accept-Language: zh-cn
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; .NET CLR 1.1.4322; Alexa Toolbar)
    Host: 220.181.37.4
    Connection: Keep-Alive而服务器上至少要有类似这样的应答:
    HTTP/1.1 200 OK
    Date: Thu, 08 Nov 2007 04:55:52 GMT
    Server: Microsoft IIS/6.0
    Content-length: 3
    Expires: Thu, 08 Nov 2007 04:58:52 GMT
    Connection: close
    Content-Type: text/html一来一回就折腾了几百个字节,而此时也许你只是为了告诉服务器"我在线"
    要保证"即时"你就不得不每秒钟刷新一次,
    页面刷新是以秒为单位的,也就是你刷新一次最快也需要一秒
    但用HTTP协议从请求到应答的时间可能会超过一秒
    …… ……
      

  22.   

    我弄的页面聊天的 http://www.ppqu.com/index_topic.php
    用 Flash 的 Socket 通讯的,没有使用页面刷新
    可以用 js 实现,我是根据 pk.4299.com 改的
      

  23.   

     Flash   的 socket 通信就是垃圾..
      

  24.   

    呵呵,本人Flash太菜,如果说用flash实现,在网上也看到过相关的介绍,但是具体性能怎么样就不知道了,能讲一下原理吗?至于前面说的大型网站的做法,我想即使是大型网站,他们越是要追求速度,他服务器是强了,但是浏览的人也不少啊,比如有一万个人,每个人的浏览器要是每秒访问一次,那对服务器造成的伤害是可想而知的。
      

  25.   

    连接协议要你自己写,很简单,就是创建连接,保持连接,收数据,发数据
    客户端比较容易,服务端相对来说就复杂些了
    好象以前有人公开过什么聊天的Server 不记得了不是还有人做这样的 http://www-t3.meebo.com.cn/index.html 跟MSN用户聊天的……
      

  26.   

    Mistruster 所说的仍然是客户端推动。仅仅是把协议简化了而已。和服务器推动还是有本质的差别的。服务器推动的在没有人说话时交流的信息量是0字节。根本不需要定时向服务器说“我在线”。