浅入浅出 Server Push

开发 后端
Server Push,即是服务器推送技术。本文通过引入Threading的类库,浅谈Server Push,一起来看。

推送技术Server Push的基础思想是将浏览器主动查询信息改为服务器主动发送信息。服务器发送一批数据,浏览器显示这些数据,同时保证与服务器的连接。当服务器需要再次发送一批数据时,浏览器显示数据并保持连接。以后,服务器仍然可以发送批量数据,浏览器继续显示数据,依次类推。

最近在做一个即时显示的面板页面。

需求:

1.即时显示;

2.无刷新。

做Web的话,一听到无刷新,马上想到的就会是Ajax,我第一版的实现方法是Ajax的Updatepanel+Timer控件,定时向服务器发出Request。实现是没有问题,但是对于资源的消耗非常恐怖,可以这么说。打开进程管理器,可以看到数据库和浏览器(因为是在本机上做)的CPU占用比较高,并且浏览器的内存占用一直在上升。。。囧——不用再多解释了,你懂的。。。

资料到处找,各种找,从Fighting Team.SDF那里,了解到了Server Push——服务器推送技术。看了一两个不怎么完整的Demo(网上这方面的资料,真不多,要不就是各种哥各种转载的)后,开始实施。来,直接贴代码:

这里要引入Threading的类库:

  1. using System.Threading;  
  2. ///后台程序段:  
  3. /// <summary>  
  4. /// 以发送服务端控制信息的方式提供HtmlTextWriter对象   
  5. /// </summary>   
  6. /// <param name="writer"></param>   
  7. protected override void Render(HtmlTextWriter writer)   
  8. {   
  9. base.Render(writer);   
  10. while (Response.IsClientConnected)   
  11. {   
  12. Response.Write("<script>Display('" + SQLHelper.select().ToString() + "')\n </script> ");   
  13. Response.Flush();   
  14. Thread.Sleep(41);   
  15. }   

可以看到,其实代码非常简单,就是重写了Rander方法。方法里,做一个死循环,将后台数据库里的数据,不停地Response到前台,展示给用户。就实现了这么一个推送的动作。

小总结一下:这个方法因为只有一个推送,比之前用Timer定时发送Request,再接受Response的方法优化许多,不仅减少了服务器的开销,也降低了数据库的负荷。再打开进程管理器看一下,CPU和内存的占用都比较低。不过可以相对性既然存在,那么说明这个方法也有不利的一方面:ClientConnected意思是,客户端连入,就是说客户端没有断开与服务端的连接。我们知道服务器的连入数是有限制的,如果一直保持连接状态不断开连接的话,那么连入数一多,这个资源的消耗又是很可怕的。所以权衡完Server Push技术,比较适合用在连入数少的场合,比如像信息显示面板之类的,连入数都不较少,比较单一,则不会占用太多的资源。

【编辑推荐】

  1. 浅析.NET中的Server push技术
  2. 2011年移动用户体验趋势:信息推送技术
  3. 详解ASP.NET自定义控件开发实例
  4. 详解ASP.NET MVC 3新的Layout布局系统
责任编辑:于铁 来源: 博客园
相关推荐

2021-02-07 08:02:33

Linux内核开源

2021-05-17 09:58:00

MySQL索引数据库

2017-09-07 15:43:24

数据库MongoDBMySQL

2022-01-06 07:59:32

WebGPUOpenGL引擎

2020-03-06 10:16:55

Spring数据库框架

2021-03-16 08:54:35

AQSAbstractQueJava

2021-06-21 08:58:14

MySQL数据库Pages

2011-07-04 10:39:57

Web

2019-01-07 15:29:07

HadoopYarn架构调度器

2017-07-02 18:04:53

块加密算法AES算法

2012-05-21 10:06:26

FrameworkCocoa

2021-07-20 15:20:02

FlatBuffers阿里云Java

2022-09-26 09:01:15

语言数据JavaScript

2018-11-09 16:24:25

物联网云计算云系统

2019-11-11 14:51:19

Java数据结构Properties

2012-02-21 13:55:45

JavaScript

2009-11-18 13:30:37

Oracle Sequ

2022-12-02 09:13:28

SeataAT模式

2009-11-30 16:46:29

学习Linux

2019-12-04 10:13:58

Kubernetes存储Docker
点赞
收藏

51CTO技术栈公众号