public void ProcessRequest(HttpContext context) { context.Response.Cache.SetCacheability(HttpCacheability.NoCache); context.Response.ContentType = "text/plain"; string value = context.Request.Params.Get(DATAFIELD); if (String.IsNullOrEmpty(value)) { context.Response.Write("500 create connection error."); return; } try { AliveClient ac = new AliveClient(null); //加入缓存 AsyncManager.AddClient(ac); //直接回复 context.Response.Write("收到回复"); } catch (Exception ex) { logger.Error("创建连接发生错误:" + ex.Message); } }
public static void AddClient(AliveClient client) { if (client == null) { return; } lock (syncObj) { clients.Add(client); } }
/// <summary> /// 心跳回复 /// </summary> public static void Heart() { AliveClient c = null; lock (syncObj) { for (int i = 0; i < clients.Count; i++) { c = clients[i]; logger.Info("回复:111111"); c.Send("服务器端推,有数据啦...."); } } }
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) { context.Response.Cache.SetCacheability(HttpCacheability.NoCache); string value = context.Request.Params.Get(DATAFIELD); //这里传过来的是SessionId,不是数据,数据不做重复Parse //用sessionId去缓存中找对应的会话,并填充异步AsyncResult HKAsyncRequest result = new HKAsyncRequest(context, cb, extraData); string error = null; if (String.IsNullOrEmpty(value)) { error = "500 SessionId is null"; context.Response.StatusCode = 500; logger.Error(error); result.Send(error); return(result); } List <AliveClient> acs = AsyncManager.Sessions.FindAll(x => x.SessionId.Equals(value)); if (acs == null || acs.Count == 0) { error = "404 SessionId:" + value + " has no connection."; context.Response.StatusCode = 404; logger.Debug(error); result.Send(error); return(result); } AliveClient ac = acs.First(); ac.Result = result; //执行命令 return(result); }
public static void Clean() { int maxTimeSpan = Int32.Parse(ConfigurationManager.AppSettings["maxTimeSpan"]); int comepleteCount = 0; int overTimeCount = 0; int invalidCount = 0; AliveClient ac = null; lock (syncObj) { for (int i = 0; i < clients.Count; i++) { ac = clients[i]; if (ac == null) { continue; } else if (ac.IsCompleted) { //完成请求 comepleteCount += 1; clients.Remove(ac); } else if ((DateTime.Now - ac.CreateTime).Minutes > maxTimeSpan) { //超时请求 overTimeCount += 1; clients.Remove(ac); } String msg = String.Format("完成一次清理任务:无效请求:%s ; 超时请求:%s ; 已完成请求:s%", invalidCount.ToString(), overTimeCount.ToString(), comepleteCount.ToString()); logger.Info(msg); } } }