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

Андрей П. Ковбович akovbovich на gmail.com
Пн Авг 13 14:45:02 PDT 2012


Перепутал Биплан с Билайн, но факт остается фактом, айдентика спи**ена.

14 августа 2012 г., 1:40 пользователь Андрей П. Ковбович
<akovbovich на gmail.com> написал:
> Цветовая схема setup-а смахивает на билайновскую. Хотя, если дизайнер
> работала в Вымпелкоме, то это не удивительно.
>
> 14 августа 2012 г., 0:52 пользователь 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://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


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