gpt4 book ai didi

javascript - SignalR 有时不调用客户端方法

转载 作者:行者123 更新时间:2023-11-30 05:35:56 26 4
gpt4 key购买 nike

我有一个 SignalR 中心,它将一些数字增量(和减量)推送到网页中的 Javascript 客户端。 ASP.NET MVC 页面最初从数据库中提取初始值,然后 SignalR 启动。通常会调用这些方法,但有些方法会在途中丢失。例如:

  • x 的初始值是 100000。
  • 服务器通常在一分钟内递增 100 次左右。
  • x 的值在客户端增加了大约 50-60 倍,所以说 x 变成 100055。
  • 当我刷新页面时,x 从数据库中提取出来,它的实际值为 100100。

集线器代码非常简单,当数据来自服务器时我正在记录:

$(function () {
var connection = $.connection.adminhub;
var myToken = "@ViewBag.Code";

connection.client.increment = function (data) {
console.log("SignalR: increment " + data);
var num = parseInt($("#" + data).text());
$("#" + data).text(num + 1);
};

connection.client.decrement = function (data) {
console.log("SignalR: decrement " + data);
var num = parseInt($("#" + data).text());
$("#" + data).text(num - 1);
};
console.log("Connecting to SignalR...");
$.connection.hub.start().done(function () {
console.log("Connected to SignalR.");
connection.server.registerForIndex(myToken);
});

});

ViewBag.Code 是服务器写的一个特殊的token,它起作用了(否则接收不到任何数据)。服务器上只有一个地方调用了 hub 的方法:

    static IHubContext Instance{
get
{
return GlobalHost.ConnectionManager.GetHubContext<AdminHub>();
}
}

public static void Increment(string key)
{
Instance.Clients.Group("stats").increment(key);
}

我的客户在 stats 组中注册。我试过不同的浏览器和不同的操作系统,它们的行为都是一样的。我检查了生命周期事件,没有连接速度变慢、断开连接、重新连接。我使用 websockets 传输连接,我与 Internet 和服务器的连接非常稳定。为什么我的值偏离了大约 50%,我该如何纠正这种行为?

最佳答案

请记住,从 signalr 检索数据是一个异步操作。即使 Javascript 是单线程的,您也无法确保在另一个请求从 html 元素中选择相同的数字之前,选择的数字会递增。也许扩展您的日志方法以查看实际从 HTML 元素中选取了哪些数字。

但是,每分钟 100 次增量应该是可行的。我建议订阅生命周期事件并查看连接状态。可能连接速度很慢或需要经常重新连接。

http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-net-client#connectionlifetime

关于javascript - SignalR 有时不调用客户端方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23844651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com