Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   AngularJS, 2 и более пользователей на одной странице - SSE? (https://javascript.ru/forum/angular/39125-angularjs-2-i-bolee-polzovatelejj-na-odnojj-stranice-sse.html)

MaximusFT 17.06.2013 09:54

AngularJS, 2 и более пользователей на одной странице - SSE?
 
И так, в попытках определить нужен ли мне AngularJS для следующего проекта, возник вопрос:
Есть приложение, допустим 1 страница, на которой встречаются несколько пользователей.
Регистрация и авторизация, далее у человека свой набор инструментов на странице. Так же есть Общие инструменты между пользователями.
Ну как пример:
1) Чат
2) Пятнашки, ну скажем по-шаговый кооператив.

В одном из проектов по "социальной" сети я использовал Server-Sent Events. Очень удобная штука. Писал ее для приложения не я, но для обновления последних сообщений, фотографий, событий на стене пользователя и прочей обновляемой вещи супер.

Вот скажем на одном из двух примеров, можно ли реализовать это.
То есть не так чтобы я обоими пользователями постоянно сканировал область хранения данных и при обновлении - обновлял экран. А так чтобы был мост либо между пользователями или сервер отдавал пользователю команду что нужно обновить Пятнашки чтобы увидеть ход соперника.

Надеюсь не сложно объяснил.

DjDiablo 17.06.2013 11:22

Angular по словам разработчиков заточен под crud приложения, создание/чтение/обновление/удаление записей в базе данных на сервере. Иными словами это админки сайтов, crm, erp, соц сети , какие либо биржы или аукционы, интернет магазины, сайты знакомств и другие подобные приложения. Возможно проканает какая нибудь текстовая игра.

В тоже время на angular не стоит писать realtime игры вроде RPG/RTS, приложения вроде word, и вообще едва ли разумно делать то что завязано на canvas или opengl. Наверно нет смысла применять его и в мелких скриптах вроде слайдера.

Иными словами ангуляр рулит прежде всего там там где много ввода/вывода информации через различные формы, это процентов 95% всех приложений.

Server-Sent Events можно свободно применить в любом фреймворке без исключений, в том числе и в Angular. Иными словами к фреймворку не каких особых требований не предъявляется .

var app = angular.module('sse', []);
 
    // контролёр
    function appCtrl($scope) {
 
        // обьект информацию из которого мы покажем в шаблоне
        $scope.msg = {};
 
        // функция которая будет вызвана по событию с сервера
        var handleCallback = function (msg) {
            //поместим информацию пришедшую с сервера в scope
            $scope.$apply(function () {
                $scope.msg = JSON.parse(msg.data)
            });
        }

        //подключаемся к источнику событий
        var source = new EventSource('/stats');

        //подписываемся на событие сервера
        source.addEventListener('message', handleCallback, false);
    }


Также EventSource('/stats'); можно вынести в отдельный сервис, и подключать сервис там где он используется.

В случае если несколько заинтерисованных директив принадлежат одному контролу, то есть смысл разместить обработку событий в родительском контроле, чтобы взаимодействие с сервером было централизованным. Данные же можно будет подключить к директивам через связывание.

MaximusFT 28.04.2014 18:31

Вопрос в продолжение поднятой темы.
Большая просьба, если есть пример рабочий или его не сложно накидать буду очень благодарен...

Есть события которые добавляют клиенты, модератор должен сидеть перед экраном и когда происходит событие принимать определенные действия...

Действия уже описаны, просто нажимать кнопки... Я не могу сейчас вот эту связку сделать чтобы страница ожидала данных и хотела их вывести.

Подскажите / помогите получать информацию из сервера.
При чем все события у меня хранятся в MySQL, как их достать и передать знаю.

MaximusFT 29.04.2014 10:38

Если вдруг кто-то собирался ответить - буду рад ответу.

Но, нашел неплохой пример:
http://www.anupshinde.com/posts/live...pps-angularjs/
http://livebase.anupshinde.com/

Большая часть вопроса закрыта...


Часовой пояс GMT +3, время: 02:20.