关于服务器端主动刷新客户端页面的问题,诚心请教
现在有类似下面的需求:
后台代码中有一个定时器,定时从各个设备获取数据,判断数据,当数据符合一定条件时,更新客户端的页面。
现在想能不能客户端在更新时无刷新?
问了一些人,有说用ajax,但是我觉得ajax在这种服务器端硬“推”给客户端的情形下好像不太适用。
也有提到说pjax,我也没接触过。
请各位高人们多多帮忙!我在ASP.NET这块没有经验。
先谢过了!
------解决方案--------------------这样的要求怎么会提出来??????????web请求的原理要弄懂。
web程序只能从服务器上“拉”数据,而不能服务器上“推”数据给客户端。
如果要从服务器上“推”数据到客户端,就该使用windows程序,对flash不懂,可能行。
------解决方案--------------------这个要求很奇怪,不过Flash的XMLSocket可以实现你要的功能。
以前有一个服务端推送的技术,不过好像浏览器对它的支持很不好。所以一直没有推广开来。
HTTP是一种无连接协议,也就是说客户端和服务端平时是没有连接的,只有客户端向服务端请求的时候才会由客户端发起连接,请求完数据之后连接又会被断开,所以服务器是无法向客户端主动推送数据的。
------解决方案--------------------客户端定时刷新,判断数据,当数据符合一定条件时,更新客户端的页面。
------解决方案--------------------Web的原理,是客户端发出请求,然后下载数据并显示.
服务器自己无法定位客户端,何来刷新客户端的数据?
楼主的功能,可以通过客户端定时刷新来实现,并用ajax实现局部刷新,结果也是很酷的!
------解决方案--------------------楼主你的要求的效果可以实现,不过实现的原理,仍然是“拉”,不可能“推”的。
在你的页面中放个长和宽都为0的iframe(这样在IE中根本就看不到),iframe里放一个具有定时刷新功能页面,也不需要太快,就用一般聊天室的刷新间隔时间吧(4至6秒),刷新时在服务器端判断是否有新的数据,如果有那就把送到这个页面的客户端,再用客户端程序更新你的当然页面,这样你的这个页子看起来就是无刷新的了。
iframe里的页子,把值传给当前页面的方法是:
<script language=javascript>
parent.document.all.你要显示更新数据的名字.value = "你在服务器端查到的值放到这里来吧 ";
</script>
注:我上面的parent.document.all.你要显示更新数据的名字.value 是针对于文本框之类的控件而言的,如果你是其他的显示数据的东西,你就自己改一下吧,总之,这里加上 parent.就行了。
------解决方案--------------------不行,服务器端不能主动更新客户端
一般只能依靠客户端定时向服务器端查询,有更新了就更新
------解决方案--------------------服务器推到客户端是不可能的,最好是用Ajax定时请求服务器判断有否更新!
------解决方案--------------------主动刷新客户端的情况我也遇到过,是用ajax实现。设计的好点,没问题能保证的需求。
=============================================================================
.net技术交流群 QQ:8793209,欢迎职业的程序员加入讨论交流!
------解决方案--------------------无论是BS还是CS,都要一端首先请求,如果客户端请求这个比较简单,就不多说了.
但是服务端发起请求,这时客户端必须有一个侦听器,不然即使服务端发磅信息,也需要由这个侦听器来触发客户端页面的刷新或者说是重载.当然AJAX是一个很好的选择.
不过,说实施,我对推技术还是持保留态度,就象我说了,即使服务端通知客户端有更新,也要由客户自己刷新,并不能让服务端替客户端刷新吧!所以流言准确的说,信息的传递可以有完全的推模式或者拉模式,如果要上升到页页刷新层面,我理解是没有真正意义上的推模式.
------解决方案--------------------ajax settimeout()每隔一段时间请求一次服务器,服务器主动刷不行,要是刷个病毒过来可麻烦了....
------解决方案--------------------对使用缓存或静态网页(包括xml),内存不会上升的比较快。如果不想定时刷新,可以考虑使用事件触发。
------解决方案--------------------bluemoon0001(小天--追梦浪子)
看了标题就有了想法
同意小天小天--追梦浪子的做法
定时异步刷新局部页面,
但要做到3秒一次,太耗资源了
那可以考虑用活动控件去做了
------解决方案--------------------关于缓存,你可以看一下:
http://chs.gotdotnet.com/quickstart/aspplus/
也许你那不属于缓存问题,时实,也不需要1秒一次,我认为4~6秒一次,够了,因为聊天室就是这么久刷一次,你也不会觉得不实时吧?