大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > ASP.NET技巧 > Asp.Net实现Http长连接推送

Asp.Net实现Http长连接推送(3)

关键词:Asp.NetHttp长连接推送  阅读(1995) 赞(16)

[摘要]本文是对Asp.Net实现Http长连接推送的讲解,对学习ASP.NET编程技术有所帮助,与大家分享。

这个类中主要实现的方法只有一个,那就是BeginProcessRequest,其他方法不用写任何代码。这个方法主要作用是建立一个IAsyncResult实例后保存起来,便于以后服务器端有了数据或是满足了特定情况把数据返回给客户端。所以我在代码里面建立了一个静态List的缓存保存这些IAsyncResult实现。当然这就是Asp.Net实现Http长连接的核心所在了。
其它的就不多说了,大家可以看源代码,看代码时大家会发现我实际建立了两个.ashx文件,这和我这个项目的逻辑有关,因为协议规定客户端发送一条数据后服务器端马上要做出回应,所以我用一个传统的ashx作回应,回应前这个传统的ashx(connection.ashx)先分析数据把分析后的数据模型保存起来,同时给客户端一个SessionId。客户端收到回应后用这个SessionId发起长连接请求,服务器端就不再重复分析数据了,而是将之前的数据从缓存中取出使用,为了调试方便我把这个SessionId写死了。同时我用Quartz.Net建立了两个任务,一个CleanJob.cs实际是作为清理任务,定时清理掉缓存中的无效或已完成请求5分钟跑一次。还有一个任务是HeartJob.cs主要是用来模拟服务器端推送的逻辑,30秒跑一次。

用到Quartz.Net是因为我个人认为在Asp.net中直接启动BackgroundWorker的方式不是很好,还是调度引擎的线程模型更可靠。具体启动调度引擎的代码在Global.asax里面。

附件中是我剥离出来的代码,删除了业务部分只做测试用。测试界面为index.aspx,在文本框中写点东西点提交,先收到服务器的回应后每个30秒收到服务器的回应弹出alert窗口。这里要提的就是客户端js代码在收到一个长连接反馈后马上又建立一个长连接,这是关键所在。

«上一页123下一页»


相关评论