老尸 发表于 2015-1-18 11:20:54

ASP.NET网页编程之用ASP.NET MVC完成基于 XMLHttpRequest long polling(长轮询)的Comet仓酷云 ...

有时也搞不懂应该学那种;主要看你以后去的那个公司是使用哪种了。就像王千祥的课上说的:企业应用现在主要就三层(其实也差不多就是MVC):表示层(主要使用html写的,很简单)、业务逻辑层(主要就是应用服务器的)。最后就是数据层(其实就是学习数据库)之前在“反向Ajax,第1部分:Comet先容”(英文版)文章中进修了“基于MultipartXMLHttpRequest的Comet”的常识,然后用ASP.NETMVC完成了一个,详见用ASP.NETMVC完成基于MultipartXMLHttpRequest的Comet。
明天持续进修了基于XMLHttpRequestlongpolling的Comet,又用ASP.NETMVC完成了一个,在这篇文章平分享一下。
先懂得一下甚么是XMLHttpRequestlongpolling?
这是一种保举的完成Comet的做法,翻开一个到服务器真个Ajax哀求然后守候呼应。服务器端必要一些特定的功效来同意哀求被挂起,只需一有事务产生,服务器端就会在挂起的哀求中送反响应并封闭该哀求。然后客户端就会利用这一呼应并翻开一个新的到服务器真个永生存期的Ajax哀求。
ThisisarecommendedmethodtoimplementCometistoopenanAjaxrequesttotheserverandwaitfortheresponse.Theserverrequiresspecificfeaturesontheserversidetoallowtherequesttobesuspended.Assoonasaneventoccurs,theserversendsbacktheresponseinthesuspendedrequestandclosesit.Theclientthenconsumestheresponseandopensanewlong-livedAjaxrequesttotheserver.
我团体的了解是,看起来就像在Web情况中客户端能定阅服务真个事务,服务器端经由过程事务往关照客户端。假如服务器端用ASP.NET来完成,能够使用.NET的事务驱念头制,很成心思,上面的示例代码将展现这一点。
先看Web前端js代码:
jQuery(function($){functionlong_polling(){$.getJSON(/comet/LongPolling,function(data){if(data.d){$(#logs).append(data.d+"<br/>");}long_polling();});}long_polling();});js代码很复杂,就是一个递回挪用(挪用在callback时举行的),经由过程jQuery的$.getJSON倡议Ajax哀求,/comet/LongPolling暗示哀求的服务端CometController的LongPollingAction的网址。这里我们能够看出完成Comet的难点不在Web前端,而是在服务器端。
接上去重点看Web服务器ASP.NETMVCController的代码。
起首要注重的是为了呼应XMLHttpRequestlongpolling哀求,我们必要完成一个异步把持器(AsyncController),假如您对AsyncController不熟习,倡议浏览MSDN上的文章UsinganAsynchronousControllerinASP.NETMVC。
先上Controller的完成代码:
(注:该把持器完成的功效是每隔5秒钟向客户端发送服务器事先间)
publicclassCometController:AsyncController{//LongPollingAction1-处置客户端倡议的哀求publicvoidLongPollingAsync(){//计时器,5秒种触发一次Elapsed事务System.Timers.Timertimer=newSystem.Timers.Timer(5000);//告知ASP.NET接上去将举行一个异步操纵AsyncManager.OutstandingOperations.Increment();//定阅计时器的Elapsed事务timer.Elapsed+=(sender,e)=>{//保留将要传送给LongPollingCompleted的参数AsyncManager.Parameters["now"]=e.SignalTime;//告知ASP.NET异步操纵已完成,举行LongPollingCompleted办法的挪用AsyncManager.OutstandingOperations.Decrement();};//启动计时器timer.Start();}//LongPollingAction2-异步处置完成,向客户端发送呼应publicActionResultLongPollingCompleted(DateTimenow){returnJson(new{d=now.ToString("MM-ddHH:mm:ss")+"--Welcometocnblogs.com!"},JsonRequestBehavior.AllowGet);}}完成异步把持器必要承继System.Web.Mvc.AsyncController,并将Action分化为两个,好比Action叫LongPolling,则分化为LongPollingAsync与LongPollingCompleted。LongPollingAsync承受客户端哀求,并倡议异步操纵;异步操纵完成,挪用LongPollingCompleted。
AsyncManager.OutstandingOperations.Increment();告知ASP.NET接上去将举行一个异步操纵。
AsyncManager.OutstandingOperations.Decrement();告知ASP.NET异步操纵完成,请挪用LongPollingCompleted()办法。
示例代码中的异步操纵就是将服务器以后工夫作为参数传送给LongPollingCompleted()办法,LongPollingCompleted()猎取服务器以后工夫并传送给客户端,客户端收到后将之显现出来,将持续倡议Ajax哀求...如许循环往复,完成了基于XMLHttpRequestlongpolling的Comet。
示例代码运转了局以下:

小结
之前以为Comet是很深邃的工具,本人下手做了以后,觉察本来没那末难。以是,主要的是下手往做!
假如不克不及在实践项目中往做,那就写一篇博客吧!
c语言的编译器,几乎是所有新平台都有的。因此从这点上看,c语言的程序,比其他任何语言更加容易跨平台。

透明 发表于 2015-1-20 20:51:06

有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。

兰色精灵 发表于 2015-1-29 23:44:45

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

乐观 发表于 2015-2-6 07:18:48

由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。

飘灵儿 发表于 2015-2-7 01:36:17

ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。

只想知道 发表于 2015-2-7 23:44:35

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

活着的死人 发表于 2015-2-8 18:10:26

Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。

冷月葬花魂 发表于 2015-2-17 10:52:20

ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。

莫相离 发表于 2015-3-12 11:57:58

我的意思是.net好用,从功能上来说比JAVA强还是很明显的。

分手快乐 发表于 2015-3-13 03:09:42

微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。

再现理想 发表于 2015-3-20 11:04:33

主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。

若相依 发表于 2015-4-20 05:27:30

对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
页: [1]
查看完整版本: ASP.NET网页编程之用ASP.NET MVC完成基于 XMLHttpRequest long polling(长轮询)的Comet仓酷云 ...