异世风流之大法师,最新电影2014已上映,王爷爹爹啵一个
这两天在使用asp.net mvc 4开发comet消息通知机制,在后端使用异步线程对消息进行订阅,客户端通过ajax长连接请求mvc中的action,如:http://localhost/event/imageset,即表示获取imageset对象的变更消息(新增,更新和删除消息)。
1.事件消息的类ievententity<tentity>类的定义
//操作类型
entityeventtype type
{
get;
}
}
public enum entityeventtype : int
{
create = 0,
update = 1,
removed = 2
}
private async task<actionresult> eventasync<tentity>(int millisecondstimeout)
{
ientityevent<tentity> entityevent = await entityeventsubcriber.instance.waitforentityevent<tentity>(millisecondstimeout);
return this.json(new
{
hasevent = null != entityevent,
entityevent = entityevent
}, jsonrequestbehavior.allowget);
}
}
(2) 如果controller层面应用或者filter中操作过session,那么为了避免长链接时不会导至同一session在其他调用中session block的情况,需要在controller头上加入[sessionstate(sessionstatebehavior.readonly)] 的attribute,来表示当前controller对session为只读操作,这样就其他操作就不会被阻塞了。
3.这里就不具体写entityeventsubscriber消息订阅器的代码了,以后将在“消息订阅与发布”的文章中详细描述。
4.jquery ajax客户端代码
var $hoverlist = $("#imagesets").hoverlist({title:"图片集列表", selectedindex: 1 });
var getevent = function(){
var getpattern = "/easyshirtbackend/imageset/0";
$.getjson("/easyshirtbackend/event/imageset/100000" , function(data){
if(data.hasevent){
//create
if(data.entityevent.type == 0){
$.each(data.entityevent.entities, function(i, entity){
//todo: 处理实体类新增
if(i == data.entityevent.entities.length - 1){
getevent();
}
});
return;
}
//update
if(data.entityevent.type == 1){
$.each(data.entityevent.entities, function(i, entity){
//todo: 处理实体类更新
if(i == data.entityevent.entities.length - 1){
getevent();
}
});
return;
}
//delete
if(data.entityevent.type == 2){
$.each(data.entityevent.entities, function(i, entity){
//todo: 处理实体类删除
if(i == data.entityevent.entities.length - 1){
getevent();
}
});
}
}else{
$("#imagesets").hoverlist("add", data);
getevent();
}
});
};
getevent();
});
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论