|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
有时也搞不懂应该学那种;主要看你以后去的那个公司是使用哪种了。就像王千祥的课上说的:企业应用现在主要就三层(其实也差不多就是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语言的程序,比其他任何语言更加容易跨平台。 |
|