我有一个 SignalR 的实现,它被用作聊天客户端。问题似乎是我有一个客户端计时器,它正在 ping 服务器以通知所有其他客户端用户的状态。
在这种情况下,我有一个心跳和一个最新的活动。心跳每隔 15 秒左右就会触发一次服务器,最新的活动会跟踪用户的交互性。这两个值被传递给服务器,以便所有其他客户端都可以收到其他人的状态通知。即:如果用户 A 超过一分钟没有移动鼠标,当他们的心跳到达服务器时,它将通过 SignalR 向所有其他用户广播他们现在“离开”..
无论如何,我有一个问题,SignalR 连接似乎呈指数增长,连接到聊天应用程序的用户数量越多。
这是我怀疑是可疑的客户端 js 计时器的来源,但我不确定为什么:
define(['jquery', 'underscore', 'backbone'],
function ($, _, Backbone) {
var Timer = Backbone.Model.extend({
defaults: {
interval: 1 * 10 * 1000,
timeout: null
},
initialize: function (options) {
_.bindAll(this, 'start', 'tick', 'stop', 'tickNow');
if (options.interval) {
this.set('interval', options.interval);
}
},
start: function () {
var timer = setTimeout(this.tick, this.get('interval'));
this.set('timeout', timer);
},
tick: function () {
var self = this;
self.trigger('timerexpired', this);
self.start();
},
tickNow: function () {
var self = this;
self.stop();
self.trigger('timerexpired', this);
self.start();
},
stop: function () {
clearTimeout(this.get('timeout'));
}
});
return Timer;
});