[Moscow.pm] websocket - а что на фронтенд?

vti viacheslav.t на gmail.com
Вт Авг 14 22:42:38 PDT 2012


Protocol::WebSocket поддерживает все версии.
13.08.2012 23:53 пользователь "Dmitry Simonov" <dsimonov на gmail.com> написал:

> В общем слушайте Дениса Ибаева, - он на этих вебсокетах собаку съел. А
> я ему эту свинью подложил :)
>
> Вебсокеты по своей сути нужны для постоянно коннекта с браузерами
> клиента. В результате внедрения вебсокетов на наш проект, мы
> фактически можем в реалтайме менять всю картинку в браузере у клиента
> и получать при этом обратную связь. При числе клиентов более четверти
> миллиона, - это ощутимо. Строго говоря, можно мы имеем распределённый
> ботнет из браузеров клиентов.
>
> Итоги внедрения: с браузерами минимальные проблемы и ох..евшие
> проблемы с провайдерами, которые всеми мыслимыми и немыслимыми
> способами пытаются сэкономить на трафике. Например, в моём московском
> офисе Акадо (сука!) режет хёдеры хендшейка. При внедрении вебсокетов
> меньше всего мы собственно занимались самими вебсокетами, а больше
> всего бились над внедрением их эмуляции, в случае проблем с
> провайдерами.
>
> Итак из чего состояло внедрение:
>
> * Мы заюзали Mojolicious с использованием Mojo::Server::Daemon на
> этапе разработки. При попытке вынести его в бой, получили неустойчивое
> поведение на больших нагрузках (подвисания, утечки памяти, потери
> коннектов). Движок сменили на Starman, - он стал панацеей.
>
> * Столкнулись с тем, что Сафари на iДевайзах юзает WebSocket76,
> который Mojolicious уже не поддерживает. Решением стал:
> https://github.com/SetupRu/mojox-transaction-websocket76
>
> * Наступили на грабли с провайдерами, которые просто неготовы с
> вебсокетам. Для них прикрутили питонячий SockJS. С ним бекендом умеет
> работать Tornado, который в отличие от SockJS не умеет работать
> неблокируемо с внутренниими интерфейсами. Допилили его проксёй,
> обученной общаться с Mojocious родными вебсокетами. По ходу действия
> столкнулись с чисто питонячими проблемами работы библиотеки WebSocket
> (она сыровата ещё). Вообще некоторые Http-протоколы на питоне
> смотрятся толи сыровато, то ли там какой-то совершенно иной подход,
> сильно отличающийся от перла с точки зрения именно интерфейсов.
>
> * Специально для наших "любимых" провайдеров транспорт вебсокетов
> пропускаем по 80му порту (все остальные порты ни каким образом от
> блокироки провайдерами не защищены), - для этого специально выделены
> ip-шники.
>
> * Для хранения сессионных данных используем мемкеш.
>
> * Параллельно всему этому развивался и допиливался js-кусок,
> работающий с Mojolicious и SockJS, постепенно превращаясь в правильный
> инструмент. Архитектурно вся связка работает по протоколу JSON RPC
> 2.0. Бекенд выступает как полноценное API, входными интерфейсом к
> котором прикручен HTML::FormHandler, как инструмент умеющий правильно
> валидировать приходящие формы (понятно, что вместо форм мы оперирует
> JSON-конструкциями).
>
> * Как отдельные грабли (хотя и незначительные) назову необходимость
> обрабатывать на уровне js русскоязычные домены с использованием
> punycode.
>
> * Прикрутили многоязычность.
>
> Результирующая связка следующая:
>
> Browser <=> fh.js <=> ( SockJS <=> Tornado <=> ) Starman <=>
> Mojolicious <=> HTML::FormHandler <=> MemCache + DBIx::Class.
>
> Получившаяся схема имеет 100% покрытие всех пользователей. На текущий
> момент построенная связка находится в бета-тестировании и мы учимся
> контролировать все звенья, чтобы они тупо не выпадали. До сих пор
> некоторым образом некоторые звенья то выпадают, то отключаются, то их
> тупо кто-то стреляет. Но это уже вопросы администрирования, на котором
> мы всё туже затягиваем гайки. Мост наведён, вытянут в струнку и готов.
>
> Смотреть можно на любых сайтах построенных на setup.ru, - вебсокеты в
> режиме бета-тестирования используются для формы обратной связи (ушко
> "задать вопрос") и корзины:
> * http://проба-пера.рф/ <http://xn----7sbbbw4cgeeg.xn--p1ai/> - форма
> обратной связи
> * http://tekstil33market.ru/katalog/polotentca/makhrovoe-polotentce-00952
> - корзина
> * http://myxbox360.ru/console/xbox-360-slim-freeboot - простая форма
> заказа
>
> Следует обратить внимание, что все три типа формы работают по одному и
> тому же единому протоколу.
>
> Жду фидбека: вопросы, замеченые косяки, пожелания.
> Полный список всех сайтов на setup.ru здесь: http://setup.ru/top/
>
> ---
> Dmitriy V. Simonov,
> Perl & Python programmer
>
>
> 2012/8/14 Akzhan Abdulin <akzhan.abdulin на gmail.com>:
> > HA Proxy, не?
> >
> > 13 августа 2012 г., 14:13 пользователь Ivan Petrov <
> i.petro.77.00 на gmail.com>
> > написал:
> >
> >> хочу таки попробовать проектик на вебсокетах сваять. хоть половина
> >> браузеров его и не поддерживает, но поскольку нужен довольно сильный
> >> интерактив, видимо придется клиенту говорить "поставьте другой
> >> браузер" если его браузер их не поддерживает...
> >>
> >> соответственно у нас везде инфраструктура была такая: nginx на
> >> фронтенде и куча бакендов в зависимости от location.
> >> сунулся в nginx - он вроде вебсокеты еще не поддерживает. а что вместо
> >> него поюзать можно?
> >> --
> >> Moscow.pm mailing list
> >> moscow-pm на pm.org | http://moscow.pm.org
> >
> >
> >
> > --
> > Moscow.pm mailing list
> > moscow-pm на pm.org | http://moscow.pm.org
> >
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20120815/a55babe9/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm