在Asp.net下实现变长连接的web即时应用的实现范例及ReverseAjax的演示介绍
ReverseAjax 反转AJAX是一种旨在将逻辑控制权转移到服务端的Web实现模式
何谓控制权转移
传统的AJAX调用一般由客户端行为触发,比如说获取区域数据,异步验证等。
ReverseAjax将控制权转交给服务端,就像服务端触发客户端事件一样,即很早的Web推的技术。
ASP.NET实现变长连接需要使用到异步页面的技术,同时该页面需要禁用会话来实现每次请求都产生一个新的实例执行。
代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="response.aspx.cs" Inherits="_Default" Async="true" AsyncTimeout="30" EnableSessionState="False"%>
if (Request.Form.Count>0)
{
if (Request.Form["type"] == "loop")
{
ChatTask task = new ChatTask(this.Context);
task._chatNow = this.ChatNow;//有新的消息的回调方法,即为通知处理,这个时候释放掉连接
string user = Request.Form["user"].Trim();
PageAsyncTask async = new PageAsyncTask(new BeginEventHandler(task.OnBegin), new EndEventHandler(task.OnEnd), new EndEventHandler(task.OnTimeout), user);
Page.RegisterAsyncTask(async);
Page.ExecuteRegisteredAsyncTasks();//异步执行
}
}
具体代码和实现效果请参见范例。
附件:
范例程序: ReverseAjaxChat范例.rar
相关推荐
-
ajax实现服务器与浏览器长连接的功能
有时候,需要服务器主动给浏览器推送数据,这里用ajax来实现这种功能,具体请看这里: <script type="text/javascript" src="__CSS__/bootstrap-3.3.5-dist/js/bootstrap.min.js"></script> <script type="text/javascript"> var uid = "{$uid}"; var i
-
Ajax长连接项目案例
所谓的长连接,就是不断去发送请求,把请求阻塞在服务器端,每次超过请求时间就去重新发送请求,保持连接,随时获取服务器端的响应的数据 项目案例: 复制代码 代码如下: function connection(){ $.ajax({ type:"GET", url:"/api2/session/event?", data:{ "uid":obj.uid, "sessionID":"cool" }, success
-
在Asp.net下实现变长连接的web即时应用的实现范例及ReverseAjax的演示介绍
ReverseAjax 反转AJAX是一种旨在将逻辑控制权转移到服务端的Web实现模式 何谓控制权转移 传统的AJAX调用一般由客户端行为触发,比如说获取区域数据,异步验证等. ReverseAjax将控制权转交给服务端,就像服务端触发客户端事件一样,即很早的Web推的技术. ASP.NET实现变长连接需要使用到异步页面的技术,同时该页面需要禁用会话来实现每次请求都产生一个新的实例执行. 复制代码 代码如下: <%@ Page Language="C#" AutoEventWir
-
浅谈C++内存分配及变长数组的动态分配
第一部分 C++内存分配 一.关于内存 1.内存分配方式 内存分配方式有三种: (1)从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在 例如全局变量,static变量. (2)在栈上创建.在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存 储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. (3) 从堆上分配,亦称动态内存分配.程序在运行的时候用malloc或new申请任意多少的内存,程序员
-
java socket长连接中解决read阻塞的3个办法
解决的方法有3个 : 1 约定发送的数据长度,比如 http的 keepAlive 就是必须依赖这个的 Content-Length 2 设置超时的时间,根据我的经验,只有在Socket级别设置才有效. 复制代码 代码如下: Socket socket = new Socket(host,port); socket.setSoTimeout(100); // 如果超过100毫秒还没有数据,则抛出 SocketTimeoutException 3 让发送端发送完数据后,关闭连接. 这个在Http的
-
oracle中变长数组varray,嵌套表,集合使用方法
创建变长数组类型 CREATE TYPE varray_type AS VARRAY(2) OF VARCHAR2(50); 这个变长数组最多可以容纳两个数据,数据的类型为 varchar2(50) 更改元素类型的大小或精度 可以更改变长数组类型和嵌套表类型 元素的大小. ALTER TYPE varray_type MODIFY ELEMENT TYPE varchar2(100) CASCADE; CASCADE选项吧更改传播到数据库中的以来对象.也可以用 INVALIDATE 选项使依赖对
-
基于php实现长连接的方法与注意事项的问题
php可以通过set_time_limit(0);来取消php脚步超时限制,从而达到长连接的效果. 例子代码如下: 复制代码 代码如下: <?php echo "每隔3秒输出一次<br />"; set_time_limit(0); //保证php程序运行不超时退出 while(1) { echo date("H:i:s")."<br />"; ob_flush(); flush(); //刷新并输出PHP缓冲数据
-
C++中的变长参数深入理解
前言 在吸进的一个项目中为了使用共享内存和自定义内存池,我们自己定义了MemNew函数,且在函数内部对于非pod类型自动执行构造函数.在需要的地方调用自定义的MemNew函数.这样就带来一个问题,使用stl的类都有默认构造函数,以及复制构造函数等.但使用共享内存和内存池的类可能没有默认构造函数,而是定义了多个参数的构造函数,于是如何将参数传入MemNew函数便成了问题. 一.变长参数函数 首先回顾一下较多使用的变长参数函数,最经典的便是printf. extern int printf(cons
-
PHP扩展模块memcached长连接使用方法分析
网上广泛流传着一篇文章,讲述php的两个扩展模块memcache和memcached的区别,其中特意强调了memcached与memcached一个很大的区别是memcached模块不支持长连接.以至于后来很多年我都认为memcached是不支持长连接的,其实不然,memcached扩展模块从很早的版本开始就已经支持长连接了.从扩展模块的源码注视中我们就能看到: /* {{{ Memcached::__construct([string persistent_id[, callback on_n
-
基于HTTP长连接的"服务器推"技术的php 简易聊天室
首先是首页,包含一个文本输入和一个显示聊天内容的iframe,还有一个隐藏iframe用来提交form表单: 复制代码 代码如下: <?php //chat.php header('cache-control: private'); header('Content-Type: text/html; charset=utf-8'); ?> <html> <script type="text/javascript"> function submitCha
-
Nginx反向代理实现支持长连接详解
前言 Nginx upstream与后端的连接默认为短连接,通过HTTP/1.0向后端发起连接,并把请求的"Connection" header设为"close".Nginx与前端的连接默认为长连接,一个用户跟Nginx建立连接之后,通过这个长连接发送多个请求.如果Nginx只是作为reverse proxy的话,可能一个用户连接就需要多个向后端的短连接.如果后端的服务器(源站或是缓存服务器)处理并发连接能力不强的话,就可能导致瓶颈的出现. Nginx目前的upst
-
Android端TCP长连接的性能优化教程分享
前言 大家应该都知道,在Android端实现TCP长连接场景其实不多,我们最熟悉的不过推送和HTTP协议的实现(OkHttp),本文讨论的是在实现推送长连接的情况下怎么来做性能优化,下文只是我的一点拙见,有不妥之处还望指出,下面话不多说了,来一起看看详细的介绍吧. 推送长连接 可以说大部分APP是离不开推送(push)这个功能的,不过平常我们都是接入第三方SDK(极光.个推等)居多,因为要做一个推送服务,不光客户端要编写相应的Socket通信代码,服务器端更是麻烦,要处理大规模的长连接服务,消息
随机推荐
- JS清除IE浏览器缓存的方法
- Xshell5 注册码 ,Xftp5 注册码,Xmanager5注册码(已测)
- iOS表视图之下拉刷新控件功能的实现方法
- 零基础写python爬虫之HTTP异常处理
- JS实现微信里判断页面是否被分享成功的方法
- setTimeout的延时为0时多个浏览器的区别
- php二维数组合并及去重复的方法
- ASP中FSO的神奇功能 - 写文件
- Python list操作用法总结
- C#和Java有什么区别和联系
- IE:“自动完成”功能
- 三个月内通过Adsense赚一百万美金
- Vim 强制保存只读类型文件的方法
- C语言中对字母进行大小写转换的简单方法
- ASP.Net PlaceHolder、Panel等控件未实现INamingContainer,导致FindControl无效
- php简单浏览目录内容的实现代码
- Windows系统下mysql5.7.21安装详细教程
- Android开发实现ImageView宽度顶边显示,高度保持比例的方法
- iOS实现应用内切换语言及字体大小(模仿微信)
- 详解ASP.NET MVC3:Razor的@:和语法