<p>Protocol::WebSocket поддерживает все версии. </p>
<div class="gmail_quote">13.08.2012 23:53 пользователь "Dmitry Simonov" <<a href="mailto:dsimonov@gmail.com">dsimonov@gmail.com</a>> написал:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
В общем слушайте Дениса Ибаева, - он на этих вебсокетах собаку съел. А<br>
я ему эту свинью подложил :)<br>
<br>
Вебсокеты по своей сути нужны для постоянно коннекта с браузерами<br>
клиента. В результате внедрения вебсокетов на наш проект, мы<br>
фактически можем в реалтайме менять всю картинку в браузере у клиента<br>
и получать при этом обратную связь. При числе клиентов более четверти<br>
миллиона, - это ощутимо. Строго говоря, можно мы имеем распределённый<br>
ботнет из браузеров клиентов.<br>
<br>
Итоги внедрения: с браузерами минимальные проблемы и ох..евшие<br>
проблемы с провайдерами, которые всеми мыслимыми и немыслимыми<br>
способами пытаются сэкономить на трафике. Например, в моём московском<br>
офисе Акадо (сука!) режет хёдеры хендшейка. При внедрении вебсокетов<br>
меньше всего мы собственно занимались самими вебсокетами, а больше<br>
всего бились над внедрением их эмуляции, в случае проблем с<br>
провайдерами.<br>
<br>
Итак из чего состояло внедрение:<br>
<br>
* Мы заюзали Mojolicious с использованием Mojo::Server::Daemon на<br>
этапе разработки. При попытке вынести его в бой, получили неустойчивое<br>
поведение на больших нагрузках (подвисания, утечки памяти, потери<br>
коннектов). Движок сменили на Starman, - он стал панацеей.<br>
<br>
* Столкнулись с тем, что Сафари на iДевайзах юзает WebSocket76,<br>
который Mojolicious уже не поддерживает. Решением стал:<br>
<a href="https://github.com/SetupRu/mojox-transaction-websocket76" target="_blank">https://github.com/SetupRu/mojox-transaction-websocket76</a><br>
<br>
* Наступили на грабли с провайдерами, которые просто неготовы с<br>
вебсокетам. Для них прикрутили питонячий SockJS. С ним бекендом умеет<br>
работать Tornado, который в отличие от SockJS не умеет работать<br>
неблокируемо с внутренниими интерфейсами. Допилили его проксёй,<br>
обученной общаться с Mojocious родными вебсокетами. По ходу действия<br>
столкнулись с чисто питонячими проблемами работы библиотеки WebSocket<br>
(она сыровата ещё). Вообще некоторые Http-протоколы на питоне<br>
смотрятся толи сыровато, то ли там какой-то совершенно иной подход,<br>
сильно отличающийся от перла с точки зрения именно интерфейсов.<br>
<br>
* Специально для наших "любимых" провайдеров транспорт вебсокетов<br>
пропускаем по 80му порту (все остальные порты ни каким образом от<br>
блокироки провайдерами не защищены), - для этого специально выделены<br>
ip-шники.<br>
<br>
* Для хранения сессионных данных используем мемкеш.<br>
<br>
* Параллельно всему этому развивался и допиливался js-кусок,<br>
работающий с Mojolicious и SockJS, постепенно превращаясь в правильный<br>
инструмент. Архитектурно вся связка работает по протоколу JSON RPC<br>
2.0. Бекенд выступает как полноценное API, входными интерфейсом к<br>
котором прикручен HTML::FormHandler, как инструмент умеющий правильно<br>
валидировать приходящие формы (понятно, что вместо форм мы оперирует<br>
JSON-конструкциями).<br>
<br>
* Как отдельные грабли (хотя и незначительные) назову необходимость<br>
обрабатывать на уровне js русскоязычные домены с использованием<br>
punycode.<br>
<br>
* Прикрутили многоязычность.<br>
<br>
Результирующая связка следующая:<br>
<br>
Browser <=> fh.js <=> ( SockJS <=> Tornado <=> ) Starman <=><br>
Mojolicious <=> HTML::FormHandler <=> MemCache + DBIx::Class.<br>
<br>
Получившаяся схема имеет 100% покрытие всех пользователей. На текущий<br>
момент построенная связка находится в бета-тестировании и мы учимся<br>
контролировать все звенья, чтобы они тупо не выпадали. До сих пор<br>
некоторым образом некоторые звенья то выпадают, то отключаются, то их<br>
тупо кто-то стреляет. Но это уже вопросы администрирования, на котором<br>
мы всё туже затягиваем гайки. Мост наведён, вытянут в струнку и готов.<br>
<br>
Смотреть можно на любых сайтах построенных на <a href="http://setup.ru" target="_blank">setup.ru</a>, - вебсокеты в<br>
режиме бета-тестирования используются для формы обратной связи (ушко<br>
"задать вопрос") и корзины:<br>
* <a href="http://xn----7sbbbw4cgeeg.xn--p1ai/" target="_blank">http://проба-пера.рф/</a> - форма обратной связи<br>
* <a href="http://tekstil33market.ru/katalog/polotentca/makhrovoe-polotentce-00952" target="_blank">http://tekstil33market.ru/katalog/polotentca/makhrovoe-polotentce-00952</a><br>
- корзина<br>
* <a href="http://myxbox360.ru/console/xbox-360-slim-freeboot" target="_blank">http://myxbox360.ru/console/xbox-360-slim-freeboot</a> - простая форма заказа<br>
<br>
Следует обратить внимание, что все три типа формы работают по одному и<br>
тому же единому протоколу.<br>
<br>
Жду фидбека: вопросы, замеченые косяки, пожелания.<br>
Полный список всех сайтов на <a href="http://setup.ru" target="_blank">setup.ru</a> здесь: <a href="http://setup.ru/top/" target="_blank">http://setup.ru/top/</a><br>
<br>
---<br>
Dmitriy V. Simonov,<br>
Perl & Python programmer<br>
<br>
<br>
2012/8/14 Akzhan Abdulin <<a href="mailto:akzhan.abdulin@gmail.com">akzhan.abdulin@gmail.com</a>>:<br>
> HA Proxy, не?<br>
><br>
> 13 августа 2012 г., 14:13 пользователь Ivan Petrov <<a href="mailto:i.petro.77.00@gmail.com">i.petro.77.00@gmail.com</a>><br>
> написал:<br>
><br>
>> хочу таки попробовать проектик на вебсокетах сваять. хоть половина<br>
>> браузеров его и не поддерживает, но поскольку нужен довольно сильный<br>
>> интерактив, видимо придется клиенту говорить "поставьте другой<br>
>> браузер" если его браузер их не поддерживает...<br>
>><br>
>> соответственно у нас везде инфраструктура была такая: nginx на<br>
>> фронтенде и куча бакендов в зависимости от location.<br>
>> сунулся в nginx - он вроде вебсокеты еще не поддерживает. а что вместо<br>
>> него поюзать можно?<br>
>> --<br>
>> Moscow.pm mailing list<br>
>> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
><br>
><br>
><br>
> --<br>
> Moscow.pm mailing list<br>
> <a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
><br>
--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
</blockquote></div>