IHttpAsyncHandler长连接的问题

SinGooCMS 2015-03-11 07:17:11
最近有个项目要求用到webIM.百度了一堆IHttpAsyncHandler的资料.看得不太明白

在读取消息的时候用到长连接.如果发现有未读消息,则输出并回调


public void StartAsyncTask()
{
//输出消息并返回
_context.Response.Write(JsonLeeCMS.Utility.JsonUtils.ObjectToJson<List<ShortMessage>>(shortmsgs));
_callback(this);
_completed = true;
}


这里没有问题.但有个疑问就是没有未读消息的时候应该如何处理?如何hold住这个连接,总不会是sleep吧?

如果没有未读消息也立即返回,那就等于是不停的轮询,还不如1秒轮询一次.

而且如果有了未读消息,又如何触发.

贴一下代码

$(function () {
asyncRequest();
});

function asyncRequest() {
var recivertype = "<%=strType %>";
var reciverid = parseInt("<%=SenderID %>");

$.ajax({
type: "post",
url: "CometHandler.ashx",
data: { rtype: recivertype, rTID: reciverid },
success: function (data) {
if (data != "") {
var json = eval('(' + data + ')');
//显示消息
jQuery.each(json, function (index, item) {
$("#showmsgwindow").append("<dt id='msg_" + item.SenderID + "'><span>" + item.SenderName + "</span> " + item.DateStr + "</dt><dd>" + item.SendMsg + "</dd>");
readmsg(item.MsgID);
});
}
asyncRequest();
},
error: function () {
asyncRequest();
}
});
}



public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
{
CometResult asynch = new CometResult(context, cb, extraData);
asynch.StartAsyncWork();
return asynch;
}

这段代码获取客户请求,异步调用获取未读消息
...全文
129 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
SinGooCMS 2015-03-11
  • 打赏
  • 举报
回复
晚上似乎没人?

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧