我有一個SignalR集線器,它正在向網頁中的Javascript客戶端推送一些數字增量(和遞減)。 ASP.NET MVC頁面最初從數據庫中提取初始值,然後SignalR開始執行。通常會調用這些方法,但有些方法會丟失。例如: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
是由服務器寫入的特殊標記,它的工作原理(否則就沒有收到任何數據)。只有一個在服務器上進行這就要求集線器的方法:
static IHubContext Instance{
get
{
return GlobalHost.ConnectionManager.GetHubContext<AdminHub>();
}
}
public static void Increment(string key)
{
Instance.Clients.Group("stats").increment(key);
}
我的客戶(S)是在該stats
組中註冊/。我嘗試過使用不同的瀏覽器和不同的操作系統,它們的行爲完全相同。我檢查了終身事件,並且沒有連接減速,斷開連接,重新連接。我使用websockets傳輸連接,並且連接到Internet和服務器都非常穩定。爲什麼我的數值偏離了大約50%,我該如何糾正這種行爲?
請考慮天堂:https://jabbr.net/#/rooms/signalr –
我沒有看到你已經證明可以解釋這一代碼什麼;我建議嘗試創建一個最小的例子來重現問題;也許你的數據參數並不總是你所期待的 –
@LarsHöppner甚至沒有參數。 SignalR只是RPC客戶端上的增量或減量方法。 –