Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 与doowb/角推的连接状态_Angularjs_Pusher - Fatal编程技术网

Angularjs 与doowb/角推的连接状态

Angularjs 与doowb/角推的连接状态,angularjs,pusher,Angularjs,Pusher,我正在尝试使用Angular Pusher包装器使用Pusher构建一个Angular项目。它工作正常,但我需要检测用户何时短暂丢失internet,以便他们能够从我的服务器检索丢失的数据更改 处理这个问题的方法似乎是在Pusher.connection.state'connected'上重新加载数据。。。但这似乎不适用于角度推进器-我正在接收推进器。连接未定义 这是我的密码: angular.module('respondersapp', ['doowb.angular-pusher']).

我正在尝试使用Angular Pusher包装器使用Pusher构建一个Angular项目。它工作正常,但我需要检测用户何时短暂丢失internet,以便他们能够从我的服务器检索丢失的数据更改

处理这个问题的方法似乎是在Pusher.connection.state'connected'上重新加载数据。。。但这似乎不适用于角度推进器-我正在接收推进器。连接未定义

这是我的密码:

angular.module('respondersapp', ['doowb.angular-pusher']).

    config(['PusherServiceProvider',
        function(PusherServiceProvider) {
            PusherServiceProvider
                .setToken('Foooooooo')
                .setOptions({});
        }
    ]);
var ResponderController = function($scope, $http, Pusher) {
    $scope.responders = [];

    Pusher.subscribe('responders', 'status', function (item) {
        // an item was updated. find it in our list and update it.
        var found = false;
        for (var i = 0; i < $scope.responders.length; i++) {
            if ($scope.responders[i].id === item.id) {
                found = true;
                $scope.responders[i] = item;
                break;
            }
        }
        if (!found) {
            $scope.responders.push(item);
        }
    });
    Pusher.subscribe('responders', 'unavail', function(item) {
        $scope.responders.splice($scope.responders.indexOf(item), 1);
    });
    var retrieveResponders = function () {
        // get a list of responders from the api located at '/api/responders'
        console.log('getting responders');
        $http.get('/app/dashboard/avail-responders')
            .success(function (responders) {
                $scope.responders = responders;
            });
    };

    $scope.updateItem = function (item) {
        console.log('updating item');
        $http.post('/api/responders', item);
    };

    // load the responders
    retrieveResponders();
};
在此设置下,我将如何监视连接状态?我基本上是在尝试为零散的连接复制Firebase追赶功能,Firebase对我来说整体上不起作用,试图管理多个数据集时太混乱,根本不想替换后端

谢谢

推送程序依赖项似乎只公开订阅和取消订阅。见:

但是,如果您访问PusherService,则可以访问Pusher实例,即使用PusherService.then的Pusher JS库提供的实例。见:

我不知道为什么pusher服务提供了一个抽象级别,为什么它不只是返回pusher实例。可能是这样,它可以添加一些特定于角度的功能$rootScope.$broadcast和$rootScope.$digest

也许您可以将pusher服务设置为依赖项,并使用以下命令访问pusher实例

PusherService.then(function (pusher) {
  var state = pusher.connection.state;
});

要澄清@leggetters的答案,您可以执行以下操作:

app.controller("MyController", function(PusherService) {
  PusherService.then(function(pusher) {
    pusher.connection.bind("state_change", function(states) {
      console.log("Pusher's state changed from %o to %o", states.previous, states.current);
    });
  });
});
还要注意的是,Angle pusher使用的是activityTimeout和pongTimeout配置来调整连接状态检测

从我有限的实验来看,连接状态是不可靠的。使用默认值,您可以脱机几秒钟,然后再重新联机,而不必再让它们变得更聪明


即使您降低了配置值,也有人可能会离线一毫秒,如果运气不好,可能会错过一条消息。

您能举个例子说明这是如何工作的吗?我是Angular的新手,发现如果没有最基本的功能,所有这些实时服务都很难实现。现在看看PubNub,似乎也有它的一系列挑战。