Arhn - архитектура программирования

Слушайте события, испускаемые одним и тем же сокетом Socket.IO

Я тестирую службу Angular, которая обертывает Socket.IO. Для этого мне нужно прослушивать события, испускаемые тем же сокетом, который я создаю.

Вот служба:

angular.module('core').factory('SocketIOService', ['$rootScope',
    function($rootScope) {

        var socket = io();

        return {

            on: function(eventName, callback) {
                var args = arguments;
                socket.on(eventName, function() {
                    $rootScope.$apply(function() {
                        callback.apply(socket, args);
                    });
                });
            }

        };
    }
]);

И кусок тестового файла (где SocketIOService — сервис, который я создаю, socket — глобальное значение singleton, возвращаемое из io(), а $rootScope — введенный $rootScope):

it('should apply changes using $rootScope.$apply', function() {
    var rootScopeSpy = sinon.spy($rootScope, '$apply');
    SocketIOService.on('anEvent', function() {});
    socket.emit('anEvent', {});
    expect(rootScopeSpy.calledOnce).toBe(true);
});

Но socket не "слышит" события, которые он прослушивает, которые он также сам излучает. Есть ли способ создать событие, а также прослушать (и «услышать») это событие?


  • Ваш точный вопрос неясен. Это не работает? 16.10.2014

Ответы:


1

В html: вы должны включить ‹ script src="http://yourdomain/socket.io/socket.io.js"> в заголовок.

В угловом:

$scope.socket = new function () {
                    var self = this;
                    var socketIO;
                    var socketConfig = {};
                    self.connect = function () {
                        if (socketIO) {
                            socketIO.connect(socketConfig);
                            return;
                        }
                        socketIO = io(window.location.protocol + '//' + window.location.hostname + ":7777", socketConfig);
                        socketIO.on('connect', function () {
                            $scope.$apply();
                        });
                        socketIO.on('your_event', function (data) {
                           // dosomething
                            $scope.$apply();
                        });

                    };
                    self.get_data = function () {
                         socketIO.emit('get_data', your data);
                    };

                }
                $scope.socket.connect();
06.01.2015
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..