_Groxot_ |
---|
А как сервис будет знать всех своих клиентов? |
Примерно так:
1. На веб-сервере лежит несколько панно (строго описывающие, какие данные с каких кассет как отображать);
2. Клиент в браузере спрашивает, например, Панно2;
3. Веб-сервер отдает клиенту Панно2 — это статическое view без наложения информации об объектах — а обработчику отдает список кассет для опроса (этот список можно извлечь из панно, либо заранее сделать отдельным файлом рядышком);
4. Обработчик посылает список кассет Серверу СКН, который уже известным способом регистрирует этот список у себя, присваивает клиенту uid и начинает опрашивать требуемые кассеты;
5. Сервер СКН отправляет Обработчику uid и состояние всех кассет на момент первого запроса в виде набора байт;
6. Обработчик преобразует этот набор в json и отправляет на веб-серверу, а он — клиенту, где javascript парсит json и в соответствии с данными обновляет состояние объектов на view;
7. Далее браузер работает через ajax, посылая веб-серверу лишь uid (подключение открывается);
8. Веб-сервер передает uid обработчику, тот — Серверу СКН.
9. Сервер СКН по uid смотрит состояние кассет и, если оно изменилось, отдает обработчику лишь те данные, которые изменились;
10 Обработчик — веб-серверу, веб-сервер — клиенту (подключение закрывается);
11. Браузер формирует новый ajax-запрос (новое подключение)
12. И так далее…
При закрытии браузера посылается команда disconnect(uid), которая дает понять Серверу СКН, что подписку можно удалить.
Фишка в том, что между пунктами 7 и 10 может пройти доля секунды, а может часа два. Поэтому делать ajax-ом постоянный опрос (polling) как минимум накладно, особенно если рассматривать в перспективе, когда клиентов может стать много.
Я же хочу реализовать СОМЕТ, т.е. передачу информации по инициативе сервера.
Вот картинка одной из реализаций: