问题描述
代码片段:前端js代码///<referencepath="jquery-1.3.2.min.js">$(document).ready(function(){functionsend(){//向comet_broadcast.asyn发送请求,消息体为文本框content中的内容,请求接收类为AsnyHandler$.post("comet_broadcast.asyn",{content:$("#content").val()});//清空内容//$("#content").val("");}functionwait(){$.post("comet_broadcast.asyn",{content:"-1"},function(data,status){varresult=$("#divResult");result.html(result.html()+"<br/>"+data);//服务器返回消息,再次立连接wait();},"html");}//初始化连接wait();$("#btnSend").click(function(){send();});$("#content").keypress(function(event){if(event.keyCode==13){send();}});});
服务端代码:publicclassAsnyHandler:IHttpAsyncHandler{publicAsnyHandler(){}publicIAsyncResultBeginProcessRequest(HttpContextcontext,AsyncCallbackcb,objectextraData){//myAsynResult为实现了IAsyncResult接口的类,当不调用cb的回调函数时,该请求不会返回到给客户端,会一直处于连接状态myAsynResultasyncResult=newmyAsynResult(context,cb,extraData);asyncResult.ClientID=context.Request.UserHostAddress;Stringcontent=context.Request.Params["content"];//向Message类中添加该消息Messages.Instance().AddMessage(asyncResult.ClientID,content,asyncResult);returnasyncResult;}#region不必理会publicvoidEndProcessRequest(IAsyncResultresult){}publicboolIsReusable{get{returnfalse;;}}publicvoidProcessRequest(HttpContextcontext){}#endregion}
配置文件:<addverb="GET,POST"path="comet_broadcast.asyn"type="IHttpAsyncHandlerCS.Base.AsnyHandler,IHttpAsyncHandlerCS"/>publicclassmyAsynResult:IAsyncResult{bool_IsCompleted=false;privateHttpContextcontext;privateAsyncCallbackcb;privateobjectextraData;publicstringClientID{get;set;}publicmyAsynResult(HttpContextcontext,AsyncCallbackcb,objectextraData){this.context=context;this.cb=cb;this.extraData=extraData;}privatestring_content;publicstringContent{get{return_content;}set{_content=value;}}#regionIAsyncResult接口publicobjectAsyncState{get{returnnull;}}publicSystem.Threading.WaitHandleAsyncWaitHandle{get{returnnull;}}publicboolCompletedSynchronously{get{returnfalse;}}publicboolIsCompleted{get{return_IsCompleted;}}#endregion//在Message类中的添加消息方法中,调用该方法,将消息输入到客户端,从而实现广播的功能publicvoidSend(objectdata){context.Response.Write(this.Content);if(cb!=null){cb(this);}_IsCompleted=true;;}}
当打开多个页面进行长连接通信时(超过10页),页面响应非常慢,并收不到发送的信息。望大神解决。
解决方案
解决方案二:
给我的感觉就是一般的长连接都非常消耗系统资源,如果做个简简单单的视频通信或者简单的聊天什么的都可以用socket或者flex。网上许多例子。
解决方案三:
楼主你好,我用了和你一样的方法来实现长连接,但是为什么同时只有一个页面的请求有效,如果打开第二个页面,之前的长连接就断开了,望请指教。