论坛首页 Java企业应用论坛

来谈谈Server Push吧

浏览 56782 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-03-16  
cocal 写道
端口数==连接数?


这么讲吧,连接的确认是以ip+端口+协议id的。
在比较老的书上说,listen到一个进入的连接,会copy 到一个新的socket 上,
这个新的socket用一个新的port号。
所以port 号限制了可用的连接。 一般性可用的连接,还不到65535,因为还有一部分被底层引用占掉的。

不知道现在的tcp/ip的socket 是不是还是这么实现。
0 请登录后投票
   发表时间:2006-03-16  
ServerPush有一种情况是用在聊天室的情况下

此时客户端就是浏览器,它仅仅是被动的接收数据

除非你在写个插件,否则UDP好像没法用

当然,我对这也理解不深,可能说的不对,不过当年写聊天室我们就是用的Server Push,基于Http
0 请登录后投票
   发表时间:2006-03-16  
scud 写道
ServerPush有一种情况是用在聊天室的情况下

此时客户端就是浏览器,它仅仅是被动的接收数据

除非你在写个插件,否则UDP好像没法用

当然,我对这也理解不深,可能说的不对,不过当年写聊天室我们就是用的Server Push,基于Http


非常正确!

引用

只不过在实现的时候吧tcp改成udp就好了吗?server端只有一个接收线程,登录是客户端发起的,server保持一张在线用户列表,需要push的时候查表把信息丢到相关的客户端(当然,客户端也随时可以发请求给服务器,通讯是双向的),增加一个最简单的ack机制,收不到回应认为其离线。当然,为了维护在线清单的及时性,执行间隔的alive ping就可以了,这个和现在ajax定时去pull来保持session有相似之处,只是可以从server发起也可以从client发起,不管是网络还是cpu开销要小的多而已。

很难理解?需要争论?

UDP的提出是由于楼主对TCP的置疑,UDP得明显的好处是Server不需要为每个client fork一个线程,不管UDP的协议开销还是应用空间的资源开销都要小的多,不反对吧? 以求突破楼主假设的socket数限制,支持一个海量的客户端。马化腾当年做QQ的时候不傻,几十成百万用户在线也不一定要google那样的服务器群。

必须承认的是,我的确没有实现过,但这个模型是成立的,基本的教科书例程嘛。为了做IM我大概也不会再去开发一套基于UDP的通讯协议出来,因为楼主的假设其实没有成立,硬件/网络的发展已非几年前可比,目前的主流IM通讯是基于TCP IP的,有标准可用肯定还是用标准咯。


Server Push 离开了浏览器那就没意思, 我也是做IM 软件的,我如果不明白UDP 与 TCP ,呵呵。 UDT 是一个不错的通讯协义,你们可以去看看,我们在系统中应用了UDT ,还不错。
0 请登录后投票
   发表时间:2006-03-17  
dwangel 写道
cocal 写道
端口数==连接数?


这么讲吧,连接的确认是以ip+端口+协议id的。
在比较老的书上说,listen到一个进入的连接,会copy 到一个新的socket 上,
这个新的socket用一个新的port号。
所以port 号限制了可用的连接。 一般性可用的连接,还不到65535,因为还有一部分被底层引用占掉的。

不知道现在的tcp/ip的socket 是不是还是这么实现。


建议做个测试:

一个tcp server,一个tcp client。client开十个连接,然后挂断,server,client分别把使用的端口号打印出来
0 请登录后投票
   发表时间:2006-03-17  
zhuam 写道

Server Push 离开了浏览器那就没意思, 我也是做IM 软件的,我如果不明白UDP 与 TCP ,呵呵。 UDT 是一个不错的通讯协义,你们可以去看看,我们在系统中应用了UDT ,还不错。


UDT不也是基于UDP的吗?呵呵,其实一楼那个不结束的request(其实叫long-pull比较准确点)也算是一种的折中吧,不太理解什么叫“没意思”? 不跳出http,哪里来的了server push哦。
0 请登录后投票
   发表时间:2006-03-17  
dwangel 写道
说实话,人家把http弄成无连接的,就是为了在低服务器消耗的条件下处理更多的连接。
现在又要把http弄成持续连接。这种感觉好怪……


要知道http名字叫“超文本传输协议”来的,本意只是希望图文并茂地把文档传阅开来的,哪里想到发展的这么走形,变成颠覆传统C/S结构的应用基础了?呵呵,如果它老爸能预计到现在这么用法,一定会加个面向连接的选项
0 请登录后投票
   发表时间:2006-03-17  
cocal 写道
dwangel 写道
说实话,人家把http弄成无连接的,就是为了在低服务器消耗的条件下处理更多的连接。
现在又要把http弄成持续连接。这种感觉好怪……


要知道http名字叫“超文本传输协议”来的,本意只是希望图文并茂地把文档传阅开来的,哪里想到发展的这么走形,变成颠覆传统C/S结构的应用基础了?呵呵,如果它老爸能预计到现在这么用法,一定会加个面向连接的选项


在http设计初期,是考虑到了机器性能问题才设计成无连接的。

http1.1里已经可以支持持续连接了,只要加上特定的头。

不过,经过代理服务器时,还是需要代理的支持。

其实http成为b/s架构基础,就是因为无连接能够以低成本(服务器)支持更多的用户。对服务器的限制也少。
0 请登录后投票
   发表时间:2006-03-17  
cocal 写道
zhuam 写道

Server Push 离开了浏览器那就没意思, 我也是做IM 软件的,我如果不明白UDP 与 TCP ,呵呵。 UDT 是一个不错的通讯协义,你们可以去看看,我们在系统中应用了UDT ,还不错。


UDT不也是基于UDP的吗?呵呵,其实一楼那个不结束的request(其实叫long-pull比较准确点)也算是一种的折中吧,不太理解什么叫“没意思”? 不跳出http,哪里来的了server push哦。


首先我想说的是,Server Push 我需要基于浏览器来实现,我如果不是在IE 这样一个特定的环境下来讨论Server Push  ,那我不是傻差啊,晕!

UDT 是一个基于udp 来部分模仿TCP的一个新协议实现,但给出他,是为了让你看看他,因为你讨论到IM 关于UDP 的实现,所以我才说他的,我并不是为了说SERVER PUSH 来用 UDT啊,同志!
0 请登录后投票
   发表时间:2006-03-17  
cocal 写道
dwangel 写道
说实话,人家把http弄成无连接的,就是为了在低服务器消耗的条件下处理更多的连接。
现在又要把http弄成持续连接。这种感觉好怪……


要知道http名字叫“超文本传输协议”来的,本意只是希望图文并茂地把文档传阅开来的,哪里想到发展的这么走形,变成颠覆传统C/S结构的应用基础了?呵呵,如果它老爸能预计到现在这么用法,一定会加个面向连接的选项


你看你所有的关于Server PUSH 的讨论, 我给你一个总结,那就是观察者模式 + TCP OR UDP 的一个实现。 晕,如果是这样我需要讨论嘛!

对于HTTP 等高层协议,你也可以设计实现一个,但你设计的浏览器能支持嘛! 同志,跳出,也要看在那里跳啊!

把这篇帖子的主题拉回来,那就是我们只讨论基于IE 或者说基于浏览器的Server Push 实现
0 请登录后投票
   发表时间:2006-03-17  
to cocal !

Server Push 是一个值得讨论的话题,他本身不是什么新技术,我讨论他,是因为在当前WEB 2.0 的大形式下,基于浏览器来实现Server Push ,对我来说很有诱惑, 而不是要文不对题的, 吓撤什么IM ,UDP 实现Server push,如果你拿出一个好的基于IE 的一个UDP Server Push方案,或者代码能说服我,那我服, 我本身就是做IM 的,你给我来这么一套,你不让我晕啊,同学 ,我不喜欢空谈啊, 实际点,现实点啊..
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics