В общем слушайте Дениса Ибаева, - он на этих вебсокетах собаку съел. А я ему эту свинью подложил :)
Вебсокеты по своей сути нужны для постоянно коннекта с браузерами клиента. В результате внедрения вебсокетов на наш проект, мы фактически можем в реалтайме менять всю картинку в браузере у клиента и получать при этом обратную связь. При числе клиентов более четверти миллиона, - это ощутимо. Строго говоря, можно мы имеем распределённый ботнет из браузеров клиентов. Итоги внедрения: с браузерами минимальные проблемы и ох..евшие проблемы с провайдерами, которые всеми мыслимыми и немыслимыми способами пытаются сэкономить на трафике. Например, в моём московском офисе Акадо (сука!) режет хёдеры хендшейка. При внедрении вебсокетов меньше всего мы собственно занимались самими вебсокетами, а больше всего бились над внедрением их эмуляции, в случае проблем с провайдерами. Итак из чего состояло внедрение: * Мы заюзали 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 <[email protected]>: > HA Proxy, не? > > 13 августа 2012 г., 14:13 пользователь Ivan Petrov <[email protected]> > написал: > >> хочу таки попробовать проектик на вебсокетах сваять. хоть половина >> браузеров его и не поддерживает, но поскольку нужен довольно сильный >> интерактив, видимо придется клиенту говорить "поставьте другой >> браузер" если его браузер их не поддерживает... >> >> соответственно у нас везде инфраструктура была такая: nginx на >> фронтенде и куча бакендов в зависимости от location. >> сунулся в nginx - он вроде вебсокеты еще не поддерживает. а что вместо >> него поюзать можно? >> -- >> Moscow.pm mailing list >> [email protected] | http://moscow.pm.org > > > > -- > Moscow.pm mailing list > [email protected] | http://moscow.pm.org > -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
