Список «Грабли» Реализации Вебсокетов На Клиентских Веб-Ресурсах Конструктора Сайтов

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

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

В ходе построения всей технологической цепочки мы легко преодолели проблемы с браузерами, которые лишь изредка не поддерживают ни сами вебсокеты, ни их эмуляцию через flash. Однако когда дело дошло до полевых испытаний, обнаружилось множество проблем с попытками интернет-провайдеров всеми мыслимыми и немыслимыми способами сэкономить трафик за счет своих клиентов.

Об этих и других «граблях» полноценной боевой реализации вебсокетов читайте под катом.

Например, в московском офисе нашей компании прокси-сервер интернет-провайдера (самый крупный в Москве) вырезает заголовки рукопожатия вебсокетов.

Таким образом, 80% наших усилий было потрачено на решение этих проблем мирным путем.

Но есть и хорошие новости: построенный пакет технологий сейчас находится в режиме бета-тестирования.

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

Мост построен, протянут и ждет своих первых посетителей.

Вот краткая хроника решения проблем на этапе реализации.

  • Mojolicious не может работать в продакшене с использованием Mojo::Server::Daemon: нестабильное поведение при больших нагрузках (зависания, утечки памяти, потеря соединений).

    Но на Mojo::Server::Hypnotoad он чувствует себя прекрасно.

  • Safari на iPhone (iPad, iPod) использует WebSocket76, который Mojolicious больше не поддерживает. Решением стал написанный нами модуль MojoX::Transaction::WebSocket76.
  • Трюки интернет-провайдеров с клиентским трафиком были побеждены решением SockJS.org, которое эмулирует веб-сокеты с помощью различных транспортов: xhr-streaming, xdr-streaming, iframe-eventsource, iframe-htmlfile, xhr-polling, xdr-polling, iframe-xhr- опрос, jsonp- опрос
  • SockJS подключается к Mojolicious через добавленный SockJS-Tornado. Пришлось добавить его с помощью модуля Python WebSocket, чтобы он работал асинхронно не только по внешнему каналу, но и по внутреннему.

  • Специально для наших «любимых» интернет-провайдеров транспорт через веб-сокеты работает на порту 80 (поскольку все остальные порты не защищены от блокировки интернет-провайдеров).

    Мы выделили IP и поддомены для клиентских сайтов.

  • Данные сеанса хранятся в MemCache.
  • В качестве транспорта связи был выбран JSON RPC 2.0 + HTML::FormHandler + DBIx::Class. Все запросы к серверу представляют собой полноценные формы, ответом на которые могут быть ошибки.

    Их многоязычная функциональность реализована через gettext.

  • В качестве отдельных «граблов» (пусть и незначительных) стоит отметить необходимость обработки русскоязычных доменов на уровне js с помощью punycode.
  • На самом деле мы пингуем браузеры клиентов.

    У нас есть пинги, в ответ на которые мы принимаем понги.

Полученная схема обеспечивает 100% охват всех пользователей.

Увидеть плоды внедрения можно на любых сайтах, построенных на setup.ru — вебсокеты в режиме бета-тестирования используются для форм обратной связи («ухо», «Задать вопрос») и корзины интернет-магазина.

Ссылки по теме:

  1. Википедия о вебсокетах
  2. Проект Модный
  3. Проект SockJS
  4. Перл-модуль MojoX::Transaction::WebSocket76
  5. Перл-модуль Моджо::Сервер::Гипножаба
  6. Модуль Python SockJS-Торнадо
  7. Модуль Python Вебсокет
  8. Конструктор сайтов Настройка.

    ру

Теги: #perl #websockets #websocket #websocket server #конструктор веб-сайтов #Высокая производительность #perl #разработка веб-сайтов
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.