Приветствую!
Есть сайты типа imo.im, которые представляют из себя единый web интерфейс для различных мессенджеров (Jabber, ICQ, MSN и др).
Знает ли кто нибудь, как устроена серверная часть этих сервисов?
Например в imo все общение с сервером сводится к отправке JSON на imo.im/imo
тут возникает вопрос, как обеспечивается для конечного пользователя постоянное соединение с Jabber сервером.
Я предполагаю, что у них связка Comet server + Их собственная реализация различных протоколов (xmpp, icq и тды)
может, кто-нибудь укажет верный путь, в какую сторону покопать
Здравствуйте, Lixo, Вы писали:
L>Я предполагаю, что у них связка Comet server + Их собственная реализация различных протоколов (xmpp, icq и тды) L>может, кто-нибудь укажет верный путь, в какую сторону покопать
Я бы делал сервис, который делал бы соединение от себя до сервера, к примеру, Аськи для каждой открытой сессии на моем веб-сервере.
И пока существует веб-сессия, держал бы открытым это соединение. Но это так — на вскидку, т.к. я особо не разбирался в протоколе Аськи и не знаю — может там можно держать одно соединение сразу для нескольких сессий.
N_C>Я бы делал сервис, который делал бы соединение от себя до сервера, к примеру, Аськи для каждой открытой сессии на моем веб-сервере. N_C>И пока существует веб-сессия, держал бы открытым это соединение.
Так-то логично, но, как при такой реализации оповещать браузер пользователя о том, что ему написали сообщение. Не заставлять же его с интервалом в несколько секунд проверять статус сервера.
Здравствуйте, Lixo, Вы писали:
N_C>>Я бы делал сервис, который делал бы соединение от себя до сервера, к примеру, Аськи для каждой открытой сессии на моем веб-сервере. N_C>>И пока существует веб-сессия, держал бы открытым это соединение. L> Так-то логично, но, как при такой реализации оповещать браузер пользователя о том, что ему написали сообщение. Не заставлять же его с интервалом в несколько секунд проверять статус сервера.
HTTP вообще односторонний протокол...
Поэтому или используете Web-Sockets (я правда их никогда не видел) или делаете в скрипте интервальное получение с сервера JSON-объекта, который показывает были ли обновления с последнего обращения. Если использовать HTTP1.1 с опцией сonnection:keep-alive, и интервал опроса короткий, то и соединение закрываться не будет — все будет достаточно быстро.
Здравствуйте, Nikolay_Ch, Вы писали:
N_C>Здравствуйте, Lixo, Вы писали:
L>>Я предполагаю, что у них связка Comet server + Их собственная реализация различных протоколов (xmpp, icq и тды) L>>может, кто-нибудь укажет верный путь, в какую сторону покопать N_C>Я бы делал сервис, который делал бы соединение от себя до сервера, к примеру, Аськи для каждой открытой сессии на моем веб-сервере. N_C>И пока существует веб-сессия, держал бы открытым это соединение. Но это так — на вскидку, т.к. я особо не разбирался в протоколе Аськи и не знаю — может там можно держать одно соединение сразу для нескольких сессий.
нет, нельзя.
насчет реализации: для некоторого набора протоколов вполне можно иметь просто jabber сервер, создавая к примеру динамически аккаунты для пользователей которые хотят логиниться в ICQ/AIM/MSN/... и передавать эти credentials соответствующему шлюзу (подключая его в ростер нового пользователя) -- web клиент даже не заметит, что он работает через XMPP на самом деле... ну в смысле он и так ни чего не знает, кроме упомянутого JSON межу его браузером и сервером (HTTP). таким образом, можно "унифицировать" на серверной стороне работу с разными протоколами -- просто имея только XMPP между HTTP сервером и (e)jabberd (без зоопарка клиентов/протоколов в разные говносети)...