Я хочу использовать socket.io в AngularJS. Я нашел следующий factory:
app.factory('socket', function ($rootScope) {
    var socket = io.connect();
    return {
        on: function (eventName, callback) {
            socket.on(eventName, function () {
                var args = arguments;
                $rootScope.$apply(function () {
                    callback.apply(socket, args);
                });
            });
        },
        emit: function (eventName, data, callback) {
            socket.emit(eventName, data, function () {
                var args = arguments;
                $rootScope.$apply(function () {
                    if (callback) {
                        callback.apply(socket, args);
                    }
                });
            })
        }
    };
и он используется в контроллере, например:
function MyCtrl($scope, socket) {
    socket.on('message', function(data) {
        ...
    });
};
проблема заключается в том, что каждый раз, когда контроллер посещается, другой слушатель добавляется, поэтому, когда сообщение получено, оно обрабатывается несколько раз.
что может быть лучшей стратегией для интеграции socket.io с AngularJS?
EDIT: я знаю, что я ничего не могу вернуть в factory и прослушивать там, а затем использовать $rootScope. $broadcast и $scope. $on в контроллерах, но это не похоже на хорошее решение.
EDIT2: добавлен в factory
init: function() {
            socket.removeAllListeners();
}
и вызовите его в начале каждого контроллера, использующего socket.io.
по-прежнему не похоже на лучшее решение.