gmail中今天见到有个聊天的功能, 实在太酷了 ICQ 的WEB页面,也有这功能 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是和GoogleTalk完美结合的,比较喜欢。 客户端发出请求。服务端返回header声明这是一个不断开的连接,并一直保持连接状态。所以服务端可以直接发送消息到客户端不用重新连接。 但我试过两个人测试, 他一开始用键盘输入, 我这边马上可以知道他在输入状态, 时间不到1秒,而且我一直在查看CPU占用很少, 所以感觉不像是客户端主动请求,如果是客户端请求的原理,好就应该是当一方按下键盘时马上发送状态上服务保存,而另一方要不停的请求这个状态, 如果这样速度应该没有这么快的吧 汗web能够实现server push?个人认为是采用了组件,纯粹的js或者服务器编程是不能实现server push的 server push是老技术了。单用php都可以实现。你在网上随便搜。现在都有纯php的serverpush服务器。我也实现过。 Gdj(陈水.智商只有129.非卖品)服务端推动不知怎样实现,要支持IE的 serverpush有一个特点就是页面好像永远下载不完。Gmail没有这种现象。 服务器的推技术好像IE不支持, 不知那位有这方面更多的资料,我看google可能不是用传统的推技术,因为单纯的服务器推技术会占用服务器的很多资源,特别是服务的端口,以GOOGLE的用户数,我想没有什么服务器够端口用 MSN也有这个功能吧` 对方输入信息时 能够知道对方在输入消息 MSN 是一个软件,可以做到P2P,实现应该不算太难, 但在网页上实现难度 就大很多了 YidingHe(机枪兵) ( ) 信誉:100 serverpush有一个特点就是页面好像永远下载不完。Gmail没有这种现象---------------------------------serverpush的页面用ajax来实现不就没现象了吗。不过没试过。感觉没必要。下载不完就下载不完呗。 serverpush一般用c来实现的(仅服务端需要用c,不用写组件)。纯js不可能实现。 我试过用ASP的flush来模拟测试AJAX,不行的, AJAX一定要等页面全部完成才行 YidingHe(机枪兵) ( ) 信誉:100 serverpush有一个特点就是页面好像永远下载不完。Gmail没有这种现象---------------------------------serverpush的页面用ajax来实现不就没现象了吗。不过没试过。感觉没必要。下载不完就下载不完呗。------------------------------------------------如果用户按下工具条的停止就不行了 想了一下,ajax应该可以做到这种效果,方法如下服务器维护这样一张表用户ID | 用户是否在线 | 用户是否在输入 | 输入的发送对象的用户ID当用户开始输入或输入框onchange时,向服务器提交更新自身状态异步请求,不用管返回。当用户关闭输入或发送时向服务器提交更新自身状态异步请求,如果是发送,检查服务器是否返回发送成功/失败等信息,如是关闭,则不用管返回如用户长时间没有提交任何请求,则服务器自动将用户是否在输入改为否。每个在线用户,每隔1秒,向服务器提交一个查询好友当前状态的异步请求,服务器一返回即用更新当前页面上好友之状态。现在没空,改天写代码试试。 楼上的应该是可以实现 , 不过效果应该会差很远, 不知GOOGLE用的是什么技术? server :push.php , state.phpclient 1 : a.htmlclient 2 : a.htmlc1每隔1秒请求服务器 state.php c2每隔1秒请求 push.php请求都用ajax请求。----------Gdj(陈水.智商只有129.非卖品)你是这么做的吗? 当然不是这样做。每隔一秒发起一次连接那还叫serverpush哪?做serverpush需要自己写一个简单的服务端(不能用iis or apache之类的)。客户只要发起第一次连接,以后就都是服务端控制了。php支持socket函数,所以也可以做。不过效率就差了点。 To: hansonboy(良) ( ) 信誉:95 2006-05-18 09:01:00 得分: 0 “楼上的应该是可以实现 , 不过效果应该会差很远, 不知GOOGLE用的是什么技术?” --------------------- 虽然我没有去编码测试,不过你想想按我的设想,会有多大的数据流量?估计都不会超过1k,只要服务器不卡,反映时间不会超过1秒的。不过要想象GMail一样支持庞大的客户群的话,自然也要有不亚于它的服务器群集啊。 要知道每发起一次连接都服务器资源都是一个巨大的浪费。因为你每次都得重新发送文件头,加载类库,查询数据库。假设你的页面执行时间需要0.03秒(大多数执行有数据库操作的页面都在这个时间)。每秒查询一次,那意味着你的服务器只能支持同时1/0.03=33在线。而serverpush服务器是支持上千人同时在线的。而且ajax聊天室的反应时间还是要一秒,和serverpush的即时性根本没得比。 用工具测试过,上了GMAIL后确实是一直连接住的, 没有断开,现在服务器我叫人用C来实现,现在主要是客户端怎样才不会被被动断开, 因为用户一按下浏览器的停止按钮后就会断开了和服务的连接, 这样服务怎样做也不起作用了 To Gdj(陈水.智商只有129.非卖品) 假设你的页面执行时间需要0.03秒,每秒查询一次,那意味着你的服务器只能支持同时1/0.03=33在线。---------这是服务器吗?每一个客户请求页面都必须等前一个客户请求页面结束?超强的并发能力,分布式处理,计算机群集。。这才叫好的服务器,不过就是很普通的那种单机,也有一定的并发处理能力,决无可能每一个客户请求页面都必须等前一个客户请求页面结束。那样像门户网站、搜索引擎之类的站点早瘫掉了。 To hansonboy(良) ( ) 信誉:95 2006-05-18 12:59:00 得分: 0 用工具测试过,上了GMAIL后确实是一直连接住的, 没有断开,现在服务器我叫人用C来实现,现在主要是客户端怎样才不会被被动断开, 因为用户一按下浏览器的停止按钮后就会断开了和服务的连接, 这样服务怎样做也不起作用了-----------断开也没关系的,你短暂的拔一下网线,再插上,gmail还是正常工作的,b/s的连接要设得弱一点,要不然怎么维护在线状态。 gana_chu() ----------------------听你口气,这么说来你的服务器能支撑每秒打开上千个非静态页面了?一个客户请求的确是不必等别的客户结束。但他占用的时间是必要的。如果同一时间超过你服务器能支撑的连接数,而你没做连接数限制的话,结果是每个页面的时间都变长。不可能说每个页占用0.03的cpu。一百个页同时访问还是占0.03。我说的这个时间是一个估计值。门户网站?搜索引擎?你还懂得说他们是一个群集。这样说了,这一个聊天室,你愿意用一台serverpush服务器还是愿意用一个50台服务器群集做的ajax聊天室? ajax聊天室不管有没有人聊天,每个在线人员每秒都会发起一次tcp连接,发送和接收数k的文件头、htm等内容,并查询数据库有无新发言。serverpush聊天室无发言时,每个在线人员只消耗tcp连接协议的数个字节(时间长短视你设的超时长短而定)。每一个人发言,只需要发送发言的字节数。整个过程不需要连接数据库或是在服务器上用内存保存发言内容。很明显看出两者的差别无发言时带宽消耗 ajax:几k/每秒 | serverpush:几字节/几十秒服务器资源消耗 ajax:保存一段时间内发言所需要的内存/数据库消耗 | serverpush:几乎无消耗。 To Gdj(陈水.智商只有129.非卖品) 假设你的页面执行时间需要0.03秒,每秒查询一次,那意味着你的服务器只能支持同时1/0.03=33在线。--------我就只引用了这一句话,也就是说只是说这句有问题,并非说serverpush比ajax差。尤其是你用了“只能支持同时1/0.03=33在线”,你好好想想,或者找任一个程序员来看看,这句话几乎是明白表达了“每一个客户请求页面都必须等前一个客户请求页面结束”的意思,我不是文字工作者,所以不是说你的语法问题,而是你的表达,太不够严谨了!再看看你的回复“听你口气,这么说来你的服务器能支撑每秒打开上千个非静态页面了?”晕啊,我有这么说过吗?只要我的服务器能支撑每秒打开66个非静态页面就可以100%的从实际上推翻你的关于“1/0.03=33”的论断了吧。有这么离谱的估计值吗?接下来的回复我不想评价了,如果你坚持你说得没错,那我也不会再回复。 再说两句关于用词严谨的话我是觉得搞技术的人,在谈论技术的时候,用词应该尽量的严谨,不能确定的事,就不要说得那么肯定,起码有“估计、个人认为”之类的字眼,让别人一看就知道,喔,这个只是个参考值,不会误导别人。从数量上来说,你提供的参考值差个百分之一二,如果不是精密度要求很高的应用,倒也无所谓,如果相差百分之五十、百分之一百以上,你觉得还有作参考的价值吗?象这么几个例子:“每秒打开上千个非静态页面”到“1/0.03=33在线”再到“一百个页同时访问还是占0.03”把单位都换算成 “每秒打开页面数”,三者相差过万倍,用这么极端的值来作对比,这哪是讨论技术的态度?根本是找别扭嘛。“无发言时带宽消耗 ajax:几k/每秒 ”,知道这个值与实际又差了多少?“几k”最少最少也表示2k吧?实际上无发言时,你只告诉服务器你还在就行了,只要http头+接口名称+你的id就够了(而且接口名称+你的id都有办法省到几个字节的程度),可以说约等于http头的长度。而服务器端返回的时候,如果对话都记录在数据库里,是会多一个数据查询的操作,但是,这个只是占用服务器资源而不会占用“带宽消耗”,所以也只要返回一个头加几个字节就行了,做得好,一个请求+返回绝不会超过1k的数据量,那么与论断相比就有超过100%的差距。ps:不好意思,又引用楼上的话,只是因为一抬头,就看到了,懒得再想个例子出来。 不能确定的事就别说?我的机器能支撑ajax 33人在线不变慢,serverpush 1千人在线。你的机器要有不同,能一千人ajax在线,那就自己算serverpush几人在线就是了。要不要每说一个值都同时报一遍自己服务器的配置呀?研究几k最少表示2k你去学语文得了。我只是就通常网站平均的文件头报个数而已。你要研究极端情况是你的自己。请不要把这当成语病。 google也是每隔一段时间访问一下服务器啦不是什么server push 就聊天室来说。serverpush的性能比ajax高几十上百倍是板上钉钉的事。两者根本没有可比性。至于我说的一个网页需要多少时间。我也不认为有什么语病。只是你地方的语言习惯和我这边不同而已。就象说一个人吃饭需要10分钟。他吃了一半跑去看球了,回来继续吃。按我这边的习惯,他吃饭花了2小时,可吃饭还是只需要10分钟。你们那边的习惯估计就是说他吃饭需要2小时吧。我们这边需要多少时间,和花了多少时间是不同的意思。 闭包初涉,求解释? 请教个js问题。。 sturts2时间标签 ,如何用js获得该时间的值??在线等待,急 window.open 如何设置能让子页面在父页面的上面. 这个 JS 可以通用吗?? 求高手协助 表单检验的问题 关掉IE后弹出一个窗口,相当于alert小窗口,怎么实现? 关于乱码转换的问题?——————急急急!!! json怎么转换对象形式 哪里有提供JavaScript内函数的用法、举例的软件 谁能提供一个javascript 编写的软件呢???
web能够实现server push?
个人认为是采用了组件,纯粹的js或者服务器编程是不能实现server push的
服务端推动不知怎样实现,要支持IE的
serverpush有一个特点就是页面好像永远下载不完。Gmail没有这种现象---------------------------------
serverpush的页面用ajax来实现不就没现象了吗。
不过没试过。感觉没必要。下载不完就下载不完呗。
serverpush有一个特点就是页面好像永远下载不完。Gmail没有这种现象---------------------------------
serverpush的页面用ajax来实现不就没现象了吗。
不过没试过。感觉没必要。下载不完就下载不完呗。
------------------------------------------------
如果用户按下工具条的停止就不行了
服务器维护这样一张表
用户ID | 用户是否在线 | 用户是否在输入 | 输入的发送对象的用户ID
当用户开始输入或输入框onchange时,向服务器提交更新自身状态异步请求,不用管返回。
当用户关闭输入或发送时向服务器提交更新自身状态异步请求,如果是发送,检查服务器是否返回发送成功/失败等信息,如是关闭,则不用管返回
如用户长时间没有提交任何请求,则服务器自动将用户是否在输入改为否。每个在线用户,每隔1秒,向服务器提交一个查询好友当前状态的异步请求,服务器一返回即用更新当前页面上好友之状态。
现在没空,改天写代码试试。
Gdj(陈水.智商只有129.非卖品)你是这么做的吗?
做serverpush需要自己写一个简单的服务端(不能用iis or apache之类的)。客户只要发起第一次连接,以后就都是服务端控制了。
php支持socket函数,所以也可以做。不过效率就差了点。
“楼上的应该是可以实现 , 不过效果应该会差很远, 不知GOOGLE用的是什么技术?”
---------------------
虽然我没有去编码测试,不过你想想按我的设想,会有多大的数据流量?估计都不会超过1k,只要服务器不卡,反映时间不会超过1秒的。不过要想象GMail一样支持庞大的客户群的话,自然也要有不亚于它的服务器群集啊。
现在服务器我叫人用C来实现,现在主要是客户端怎样才不会被被动断开, 因为用户一按下浏览器的停止按钮后就会断开了和服务的连接, 这样服务怎样做也不起作用了
假设你的页面执行时间需要0.03秒,每秒查询一次,那意味着你的服务器只能支持同时1/0.03=33在线。
---------
这是服务器吗?每一个客户请求页面都必须等前一个客户请求页面结束?
超强的并发能力,分布式处理,计算机群集。。这才叫好的服务器,不过就是很普通的那种单机,也有一定的并发处理能力,决无可能每一个客户请求页面都必须等前一个客户请求页面结束。那样像门户网站、搜索引擎之类的站点早瘫掉了。
用工具测试过,上了GMAIL后确实是一直连接住的, 没有断开,
现在服务器我叫人用C来实现,现在主要是客户端怎样才不会被被动断开, 因为用户一按下浏览器的停止按钮后就会断开了和服务的连接, 这样服务怎样做也不起作用了
-----------
断开也没关系的,你短暂的拔一下网线,再插上,gmail还是正常工作的,b/s的连接要设得弱一点,要不然怎么维护在线状态。
----------------------
听你口气,这么说来你的服务器能支撑每秒打开上千个非静态页面了?一个客户请求的确是不必等别的客户结束。但他占用的时间是必要的。如果同一时间超过你服务器能支撑的连接数,而你没做连接数限制的话,结果是每个页面的时间都变长。不可能说每个页占用0.03的cpu。一百个页同时访问还是占0.03。我说的这个时间是一个估计值。门户网站?搜索引擎?你还懂得说他们是一个群集。这样说了,这一个聊天室,你愿意用一台serverpush服务器还是愿意用一个50台服务器群集做的ajax聊天室?
不管有没有人聊天,每个在线人员每秒都会发起一次tcp连接,发送和接收数k的文件头、htm等内容,并查询数据库有无新发言。serverpush聊天室
无发言时,每个在线人员只消耗tcp连接协议的数个字节(时间长短视你设的超时长短而定)。每一个人发言,只需要发送发言的字节数。整个过程不需要连接数据库或是在服务器上用内存保存发言内容。很明显看出两者的差别
无发言时带宽消耗 ajax:几k/每秒 | serverpush:几字节/几十秒
服务器资源消耗 ajax:保存一段时间内发言所需要的内存/数据库消耗 | serverpush:几乎无消耗。
假设你的页面执行时间需要0.03秒,每秒查询一次,那意味着你的服务器只能支持同时1/0.03=33在线。
--------
我就只引用了这一句话,也就是说只是说这句有问题,并非说serverpush比ajax差。
尤其是你用了“只能支持同时1/0.03=33在线”,你好好想想,或者找任一个程序员来看看,这句话几乎是明白表达了“每一个客户请求页面都必须等前一个客户请求页面结束”的意思,我不是文字工作者,所以不是说你的语法问题,而是你的表达,太不够严谨了!
再看看你的回复“听你口气,这么说来你的服务器能支撑每秒打开上千个非静态页面了?”
晕啊,我有这么说过吗?只要我的服务器能支撑每秒打开66个非静态页面就可以100%的从实际上推翻你的关于“1/0.03=33”的论断了吧。有这么离谱的估计值吗?
接下来的回复我不想评价了,如果你坚持你说得没错,那我也不会再回复。
我是觉得搞技术的人,在谈论技术的时候,用词应该尽量的严谨,不能确定的事,就不要说得那么肯定,起码有“估计、个人认为”之类的字眼,让别人一看就知道,喔,这个只是个参考值,不会误导别人。从数量上来说,你提供的参考值差个百分之一二,如果不是精密度要求很高的应用,倒也无所谓,如果相差百分之五十、百分之一百以上,你觉得还有作参考的价值吗?
象这么几个例子:
“每秒打开上千个非静态页面”到“1/0.03=33在线”再到“一百个页同时访问还是占0.03”
把单位都换算成 “每秒打开页面数”,三者相差过万倍,用这么极端的值来作对比,这哪是讨论技术的态度?根本是找别扭嘛。“无发言时带宽消耗 ajax:几k/每秒 ”,知道这个值与实际又差了多少?
“几k”最少最少也表示2k吧?实际上无发言时,你只告诉服务器你还在就行了,只要http头+接口名称+你的id就够了(而且接口名称+你的id都有办法省到几个字节的程度),可以说约等于http头的长度。而服务器端返回的时候,如果对话都记录在数据库里,是会多一个数据查询的操作,但是,这个只是占用服务器资源而不会占用“带宽消耗”,所以也只要返回一个头加几个字节就行了,做得好,一个请求+返回绝不会超过1k的数据量,那么与论断相比就有超过100%的差距。
ps:不好意思,又引用楼上的话,只是因为一抬头,就看到了,懒得再想个例子出来。
我的机器能支撑ajax 33人在线不变慢,serverpush 1千人在线。你的机器要有不同,能一千人ajax在线,那就自己算serverpush几人在线就是了。要不要每说一个值都同时报一遍自己服务器的配置呀?研究几k最少表示2k你去学语文得了。我只是就通常网站平均的文件头报个数而已。你要研究极端情况是你的自己。请不要把这当成语病。
不是什么server push