Друзья, а расскажите мне, пожалуйста, как вы обеспечиваете realtime в своих приложениях / сайтах? Websockets, long polling, iframes, flash?
Хотелось бы узнать о таком, что бы корректно работало в большинстве браузеров и могло работать с раздельными каналами (группами пользователей).
Ajax Push Engine всем хорош, но тянет за собой MooTools. Node.js + Socket.io просто шикарен, но не умеет работать с каналами (точнее для пущей объективности скажу, что умеет, но через приблуды, которые то в inactive development, то без документации).
Очень не рекомендую использовать его. Чрезвычайно убогий программный интерфейс, отсутствие нормальной документации. Уже сколько времени прошло, а биндинги только для пхп есть.
Для питона я смотрел — они ужасны, это калька с php, не учитывая особенностей питона. Которая не всегда работает.
Юзаем комет-сервер meteorserver.org, он а зависимости от браузера выберает пуш-метод: iframe или long polling через XmlHttpRequest. Умеет работать с каналами. У него своя js-библиотека с удобным api.
Ещё есть комет-сервер под названием www.ape-project.org/. Он, вроде, хорош, хотя я его не пробовал. У метеора есть проблема с тем, что там на WebEngine-браузерах throbber (знак загрузки) работает, пока идёт long poll. Я знаю, как это починить, но руки не дошли залезть в недра.
Питоний Tornado, на мой взгляд, лучший из асинхронных фреймворков. Довольно гибок. Кроссбраузерности я достиг используя jquery и 15 своих строк кода на js для реалтайма. Очень просто и быстро.
Серверная часть — немного другая часть вопроса, автор просил именно о клиенте или, как минимум, включая решение для клиента. Иначе говоря, вот эти «15 своих строк кода» и интересны.
К tornado клиентская часть от socket.io прикручивается через tornadio (см. habrahabr.ru/blogs/python/112711/ ). Имеет смысл использовать вместо socket.io-node, если все остальное на питоне тоже написано (мой use case был — к джанге все это прикрутить с общей авторизацией).
Что значит «умеет работать с каналами»? Это обычно достигается ведь через какое-то стороннее хранилище, нет? Чтобы при перезапуске/обновлении кода все очереди/сообщения не слетали. Для того же redis под node.js чуть ли не лучший драйвер из асинхронных, и там pubsub есть. Эти «каналы» просто можно по-разному реализовывать, поэтому совсем необязательно плюс, когда что-то такое прямо в фреймворк пихают. Если же просто через общую память реализовывать, там никаких «сторонних приблуд» не нужно, задача элементарной кажется: храним массивчики с подписчиками каналов, когда нужно — всем шлем по сообщению.