【发布时间】:2014-05-24 11:48:02
【问题描述】:
我有一个 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是服务器写的特殊令牌,它可以工作(否则它不能接收任何数据)。服务器上只有一个地方调用了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%,我该如何纠正这种行为?
【问题讨论】:
-
我在您展示的代码中看不到任何可以解释这一点的内容;我建议尝试创建一个最小的示例来重现该问题;也许您的数据参数并不总是您所期望的
-
@LarsHöppner 甚至没有参数。 SignalR 只是 JS 客户端上的 RPC 递增或递减方法。
-
@RoyiNamir 我无法使用 Facebook 登录,登录机制已损坏。
-
在您的代码示例中,您使用 data/key 参数来选择 DOM 元素,这就是我的意思;我尝试了一个简单版本的你正在做的事情,每秒 2 条消息,它按预期工作(v2.0.3),所以我想说你正在做的事情的某些方面不是问题;问题:您是否将日志语句的数量与您期望的调用数量进行了比较?它发生在一个客户身上吗? SignalR 版本?
标签: javascript asp.net signalr