博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Server-push技术(comet)----------asp.net中的异步处理+client与服务器端的长连接
阅读量:4172 次
发布时间:2019-05-26

本文共 1739 字,大约阅读时间需要 5 分钟。

server-push技术已经面世很久了,但直到GTALK的诞生才慢慢的引导出这项技术,不过到现在为止,也很少有人去应用这方面的技术,server-push倒底是一个什么样的东西呢?
故名思义,server-push即“服务器推”的意思,ajax大家都用过,它和server-push是完全相反的两个东西,ajax是从服务器端拉取数据,如果要定期更新页面上显示的数据块,那么最简单的方法就是写个计时器,server-push则不同,它的本质是将client与server建立一个长连接,即连上后不断开,一旦服务器端有新的数据就将其推送到客户端,讲到这里出现了几个问题。
1.ajax与server-push的区别与相同点分别是什么?
答:ajax与server-push的共同点是,它们同样使用javascript实现数据无刷新展示,区别在于,如果你使用ajax时时更新数据,那么无论服务器端数据有无变化,都会定期向服务器端取数据,这样便造成了一些不必要性能消耗,对服务器造成了一定的压力,而server-push则不同,它是在服务器端有新数据产生的时候才对客户端进行数据反馈,不过其缺点也产生于此,因为它会占用WEB服务器的连接数,用户访问量大且对连接数有一定限制的WEB服务器是不适用于server-push的。
2.服务器端如何发现有新数据?
答:这个问题需要根据具体应用环境来看,如果用于“即时通讯”工具的在线用户统计,服务器端发现有新用户登录,即向所有客户端推送数据,还有一种用得比较多的方式是在服务器端使用多线程来监控数据的更改。
3.服务器端如何往客户端推数据?
答:此问题是最关键的,服务器端怎么推送数据到客户端呢?.net中有个异步回调,使用它便可以实现服务器端往客户端数据的推送,.net中异步回调是怎么回事呢?其实很简单.
e.g. 写个类,假如专门用来实现异步回调,必须注意以下几点
1>继承IHttpAsyncHandler接口 //定义 HTTP 异步处理程序对象必须实现的协定。
2>以下几个方法不能少
 //启动对 HTTP 处理程序的异步调用。
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) {}
//进程结束时提供异步处理 End 方法。
public void EndProcessRequest(IAsyncResult result){}
//获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例。 (继承自 IHttpHandler。)
public bool IsReusable{get { return false; ; }}
//通过实现 IHttpHandler 接口的自定义 HttpHandler 启用 HTTP Web 请求的处理。 (继承自 IHttpHandler。)
public void ProcessRequest(HttpContext context){throw new NotImplementedException();}
//重点在这里,这里负责向客户端写数据
try
{
  context.Response.Write(this.value);
if (m_Callback != null)
{
  m_Callback(this);//此处执行完毕,客户端ajax的请求便可获取到服务器端推送的数据了
}
}
catch { }
finally
{
  m_IsCompleted = true;
}
上面方法中的this指的是另外一个类,此类继承接口IAsyncResult(//表示异步操作的状态)
终上所述,server-push需要客户端与服务器端建立一个长连接,这个长连接不能断,这样服务器端一旦有东西就会通过这个管道传到客户端,数据的push又需要使用到.net的异步回调。此处没有涉及到具体的代码编写,对于没有接触过.net异步回调的朋友来说看起来可能有点吃力,不过首先明白原理,然后再慢慢的去摸索技术。

转载地址:http://wzdai.baihongyu.com/

你可能感兴趣的文章
信息系统的生命周期各阶段及说明
查看>>
Ubuntulinux离线安装ClamTk杀毒软件步骤和使用方法
查看>>
摆脱贫穷2021V1
查看>>
Android.Could not find *.apk
查看>>
JNI
查看>>
Android基于TranslateAnimation的动画动态菜单
查看>>
android NDK中的GCC编译器
查看>>
Android NOtification 使用
查看>>
Android的SharedPreferences保存与删除数据简单实例
查看>>
android 如何从sqlite读取数据到spinner下拉中显示
查看>>
Android实现开机自动运行程序
查看>>
最近几天搭建MySql且连接问题总结
查看>>
搭建Tomcat
查看>>
在MyEclipse中运行tomcat出现Error initializing endpoint错误
查看>>
JSP文件中的上传功能(JSP中的相对路径)------JSP
查看>>
jsp中上传文件的源代码
查看>>
使用SQL语句查询表中重复记录并删除
查看>>
将xml中的数据导入到数据库
查看>>
Qt容器测试
查看>>
自定义插件
查看>>