Asp.net 创建单页应用程序的最佳堆栈/解决方案,允许多个用户实时贡献和查看更改
你好 我正在尝试为数据库构建一个非常小的显示应用程序。应用程序需要动态显示连接数据库中的数据,而无需用户不断刷新,但用户需要同步速率小于5秒。我研究了web API和MVC结构(CRUD)。这对于单用户输入非常有效,但我需要根据任何用户对数据库所做的任何更改来更改显示。应用程序将只有少量用户(WebSocket) 最好的解决方案是使用。WebSockets由一种高级技术组成,它在客户端和服务器之间创建一个双工连接,每当服务器需要发送数据时,它都可以将数据发送到活动连接。由于您使用的是ASP.NET,这将对您非常有帮助。您可以观看s about Signal 推送通知 您还可以使用对侦听器的推送通知进行推送。在这方面会有所帮助。这不如WebSockets好,因为如果要向服务器发送请求,客户端必须处理HTTP请求 投票 您可以在服务器上创建自己的API函数,并使用轮询向其发送请求。通用轮询器的示例如下:Asp.net 创建单页应用程序的最佳堆栈/解决方案,允许多个用户实时贡献和查看更改,asp.net,database,windows,entity-framework,Asp.net,Database,Windows,Entity Framework,你好 我正在尝试为数据库构建一个非常小的显示应用程序。应用程序需要动态显示连接数据库中的数据,而无需用户不断刷新,但用户需要同步速率小于5秒。我研究了web API和MVC结构(CRUD)。这对于单用户输入非常有效,但我需要根据任何用户对数据库所做的任何更改来更改显示。应用程序将只有少量用户(WebSocket) 最好的解决方案是使用。WebSockets由一种高级技术组成,它在客户端和服务器之间创建一个双工连接,每当服务器需要发送数据时,它都可以将数据发送到活动连接。由于您使用的是ASP.NE
function Initializable(params) {
this.initialize = function(key, def, private) {
if (def !== undefined) {
(!!private ? params : this)[key] = (params[key] !== undefined) ? params[key] : def;
}
};
}
function Poller(params) {
Initializable.call(this, params);
var that = this;
this.initialize("url", window.location.href);
this.initialize("interval", 5000);
this.initialize("type", "POST");
this.initialize("method", "POST");
this.initialize("data", {});
this.initialize("strict", true);
this.initialize("isWebSocket", false);
this.initialize("message", "Poll");
this.initialize("webSocketHandler", undefined);
if (this.isWebSocket && !this.webSocketHandler) {
this.initialize("module", module);
this.initialize("page", page);
this.webSocketHandler = new WebSocketHandler({
ConnectNow: true,
module: this.module,
page: this.page,
message: this.message,
Message: function(e) {
that.done(e.data);
}
});
}
var defaultFunction = function() {};
this.initialize("done", defaultFunction);
this.initialize("fail", defaultFunction);
this.initialize("always", defaultFunction);
//WS
this.initialize("isWebSocketPrepared", function() {
return true;
});
this.initialize("sendingWebSocket", function() {});
this.initialize("handleUnpreparedWebSocket", function() {});
this.initialize("sendWSData", function(message) {
if (that.webSocketHandler.isReady()) {
if (that.isWebSocketPrepared()) {
that.webSocketHandler.send(JSON.stringify({
module: module,
page: page,
message: message
}));
that.sendingWebSocket();
} else {
that.handleUnpreparedWebSocket();
}
} else {
that.handleUnpreparedWebSocket();
}
});
this.isRunning = function() {
return !!params.intervalID;
};
this.run = function() {
if (this.strict && (this.green === false)) {
return;
}
this.green = false;
if (!that.isWebSocket) {
$.ajax({
url: this.url,
method: this.method,
data: this.data
}).done(function(data, textStatus, jqXHR) {
that.green = true;
that.done(data, textStatus, jqXHR);
}).fail(function(jqXHR, textStatus, errorThrown) {
that.green = true;
that.fail(jqXHR, textStatus, errorThrown);
}).always(function(param1, param2, param3) {
that.green = true;
that.always(param1, param2, param3);
});
} else {
that.sendWSData(that.message);
}
};
this.start = function() {
if (!params.intervalID) {
this.run();
params.intervalID = setInterval(this.run.bind(this), this.interval);
}
};
this.stop = function() {
if (!!params.intervalID) {
clearInterval(params.intervalID);
params.intervalID = undefined;
}
};
}
永久框架
你也可以使用永远的框架,它是永远加载的
iframe
s。阅读更多信息:这个问题似乎是基于观点的:你可能想看到:@Progressive当问题邀请意见时,答案并不是固执己见的,因为我们有一组有限的可能性,它们都应该被考虑。是的,我一直都是顺着信号路往前走。我会继续观察和发展。感谢输入。@皮特卡曼,如果我的回答回答了你的问题,那么你可以考虑接受它作为正确的答案。