【推】与【拉】如何选择?

sqz10200 软通动力 项目经理  2010-10-09 11:50:25
我们都知道,涉及到网络双方通讯的程序,必然会有一个server一个client。从谁是消息的发起者这个角度看,通讯模型分为server-push和client-pull两种。
一种是继续走client-pull概念,方法就是用一个iframe定时去刷服务器上的数据,只不过刷新的间隔狠短(1秒-5秒左右),靠服务器网络的快速响应达到接近实时。而另外一种,就是走server-push概念,方法就是用户连上网后,连接不断,就好像你下载一个狠大的文件一样,永远都下载不完,服务器总有新东西冒出来。在这之后,这个方法被证明为是理论上可行的,也是我们能想到的在web上实现server-push的唯一方法。



我这个项目采用的就是server-push这种方式,3个页面需要服务器推送的数据,(项目中有站点这个概念,类似于公交站)如果站点多了,推送的内容也多后台代码也要相应的会多出来。定制式项目这种挺不错的,而且这个项目访问量并不高采用server-push到没太大问题。但是呢经理现在要我增加另一条公交线路,就是说多了好多站点,这些站点又与原有的不再同一个页面中,而且增加站点不仅要修改页面代码,而且还要修改后台推送的内容,这样改动比较多我觉得。项目今后发展的也肯定是增加站点,这种路线,这样的话每次都要增加页面,增加后台内容修改觉得挺大的。

所以我在想要不要改成client-pull模式这样的话最少后台不用做改动,只需要改页面的话就能达到增加站点,而且是增加起来挺容易的。大家帮我琢磨琢磨,给客户的是没有访问量的,最近又要发布一套,发布了没啥访问量 - - 所以在想现在改怎么弄。站点肯定是越来越多,这种情况下当然改动能越少越少了我不用重复做。


【推】
----Server-Push
大家都知道采用这种方式server和client之间会有一个长链接如果这种长连接过多肯定是要出问题的。一般的服务器,操作系统内核最多只支持65535个socket,实际上受限于网络带宽、CPU内存以及I/O等处理能力,最多最多大概也就1-2万个socket能够同时处理。

【拉】
----Client-pull
这个是比较简单的,大家平常用的就是这种方式用个定时器每个几秒就发送一个请求,获取新的数据修改页面相应的内容




【推】与【拉】取舍该咋弄?
...全文
110 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sqz10200 2010-10-12
[Quote=引用 11 楼 qq38396025 的回复:]

推的方式,有连接数的问题,拉的方式,有间隔时间和并发的问题;
各有利弊吧,看你的情况而定;
一般来讲,实时性要求高,像网页的rpg游戏,一般用推,
如果实时性要求不高,可以用拉;

其实我还没猜到你的系统是一个什么东东;

个人愚见;
[/Quote]

我的软件是猜不到很正常,就给几个客户用而已



推得花存在一个问题,就是在增加站的情况下我需要修改后台代码,要做相应的添加,页面当然也要做的


我用的DWR + COMET

第一次弄写的不好往上加代码还挺麻烦的

用拉的话呢,并发是一个问题,而且我还担心时间不准,说是5秒一次,说不定就是4.5秒一次呢
回复
East271536394 2010-10-10
推的方式,有连接数的问题,拉的方式,有间隔时间和并发的问题;
各有利弊吧,看你的情况而定;
一般来讲,实时性要求高,像网页的rpg游戏,一般用推,
如果实时性要求不高,可以用拉;


Server-push 好用;。
回复
sqz10200 2010-10-09
dwr+comet

这种形式现在我的项目中
回复
sqz10200 2010-10-09
[Quote=引用 3 楼 inhibitory 的回复:]
一种是继续走client-pull概念,方法就是用一个iframe定时去刷服务器上的数据,只不过刷新的间隔狠短(1秒-5秒左右),靠服务器网络的快速响应达到接近实时。而另外一种,就是走server-push概念,方法就是用户连上网后,连接不断,就好像你下载一个狠大的文件一样,永远都下载不完,服务器总有新东西冒出来。在这之后,这个方法被证明为是理论上可行的,也是我们能想到的在web上实现server……
[/Quote]

我用的就是用DWR

现在不仅要考虑效率问题

而且

还要想到以后增加站点的时候方便问题

感觉server-push的话不方便添加

pull
肯定是要用Ajax的

所以现在还在考虑中
回复
Inhibitory 2010-10-09
一种是继续走client-pull概念,方法就是用一个iframe定时去刷服务器上的数据,只不过刷新的间隔狠短(1秒-5秒左右),靠服务器网络的快速响应达到接近实时。而另外一种,就是走server-push概念,方法就是用户连上网后,连接不断,就好像你下载一个狠大的文件一样,永远都下载不完,服务器总有新东西冒出来。在这之后,这个方法被证明为是理论上可行的,也是我们能想到的在web上实现server-push的唯一方法。
1. pull方式iframe太慢,使用ajax效率会更好一些,毕竟传递的只是有效数据。
2. push方式如果用你提的连接不断,服务器表示鸭梨很大。可以使用comet来实现,如DWR或者其他的,参考此文http://macrochen.javaeye.com/blog/28020
回复
taxidi 2010-10-09
学习。。。。。
回复
sqz10200 2010-10-09
【推】与【拉】

项目中如何选择
回复
qq38396025 2010-10-09
推的方式,有连接数的问题,拉的方式,有间隔时间和并发的问题;
各有利弊吧,看你的情况而定;
一般来讲,实时性要求高,像网页的rpg游戏,一般用推,
如果实时性要求不高,可以用拉;

其实我还没猜到你的系统是一个什么东东;

个人愚见;
回复
year1234 2010-10-09
关注下
回复
我觉得用推的好。
如果是用拉的形式 访问量如何很大的话。服务器肯定会顶不住的。
回复
zhuzhanwei 2010-10-09
可以使用DWR,可以用js直接访问java类,也可以在java类里设置页面的值,使用轮询技术轮询所有的在线客户,把数据从服务器推给客户端。我有这样的例子
回复
plumei 2010-10-09
学习。。。
回复
zn85600301 2010-10-09
关注下
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2010-10-09 11:50
社区公告
暂无公告