我正在使用SignalR将通知推送到角度应用程序。
之前我已经开始工作了(虽然看起来有点不稳定),现在我遇到了有关重新连接的更多问题。
我已经到了盯着文档的演示代码的地步,而其他人的代码似乎从来没有像SignalR那样在SignalR中工作。所以我发布了我的代码,看看是否有任何我不能正常做错的事情,这些信息不允许SignalR一致地工作,并且能够一致地启动,重新连接和断开连接。
我有一个如下所示的通知服务:
.factory('Notification', ['$rootScope', '$log', '$localstorage', 'User', 'ENV', 'Events',
function ($rootScope, $log, $localstorage, User, ENV, Events) {
var self = this;
this.proxy = null;
this.connection = null;
this.initializeSockets = function () {
self.connection = $.hubConnection(ENV.socketEndpoint, { useDefaultPath: true, logging: true })
self.connection.qs = { token: User.getToken() };
self.proxy = self.connection.createHubProxy('notificationEmitter');
self.proxy.on('onNotification', function (notification) {
$rootScope.$emit(notification.Topic, notification.Data);
});
if (self.connection.state === $.signalR.connectionState.disconnected) {
self.connection.start(function () {})
.done(function (conn) {
$log.info('Connected to notification emitter');
}).fail(function (a) {
$log.info('Unable to connect to connect:' + a)
});
}
self.connection.starting = function (data) {
$log.info('starting'); -> NEVER SEEMS TO GET CALLED
}
self.connection.disconnected = function (data) {
$log.info('disconnected'); -> NEVER SEEMS TO GET CALLED
setTimeout(function () {
proxy.connection.start();
}, 20000); // Restart connection after 5 seconds
};
self.connection.reconnecting = function (data) {
$log.info('reconnecting');
}
self.connection.reconnected = function (data) {
$log.info('reconnected');
}
self.connection.connectionSlow = function (data) {
$log.info('connectionSlow');
}
self.connection.error = function(error){
$log.info('Signal R Error:' + error);
}
}
$rootScope.$on(Events.userAuthenticated, function (event, user) {
self.initializeSockets();
})
return self;
}])
正如我所提到的,它似乎在我第一次开始工作的大部分时间连接,但在第一页刷新之后(以及每次之后)我从SignalR日志中获得以下内容。
答案 0 :(得分:0)
开始:在通过连接发送任何数据之前引发。
所以它与连接无关。
SignalR Hub中的OnReconnected事件处理程序可以直接执行 在OnConnected之后但不在给定客户端的OnDisconnected之后。该 因为你可以重新连接而不断开连接 有几种方法可以使用“#34; connection"用于 SignalR。
连接后重新连接。所以你从未见过断线连接,这是正常的。
如果客户端在没有机会调用Stop的情况下停止运行 方法,服务器等待客户端重新连接,然后结束 断开连接超时后的SignalR连接。
所以每个刷新页面实际上都是这样做的。您停止运行连接而不调用Stop。
如果您没有任何问题,这个生命周期很正常。
检查more