Когда-то давным-давно, в девяностые годы, компьютеры были большими, трава зеленой, а вода мокрой. В эти сказочные времена, у кого-то был Интернет дома, у кого-то на работе, но почти ни у кого его не было и там, и там. А уж Интернета на телефоне не было и вовсе ни у кого. (И люди жили, между прочим! Не правда ли, сложно в это поверить?)

Придумывая ICQ, его авторы естественно смотрели на окружающий мир (а больше смотреть было не на что, других инстант-мессенджеров в то золотое время не было) и решения принимали соответствующие этому миру:
– никто не работает через Интернет, никому не нужны рабочие контакты дома, давайте хранить контакт-лист на клиенте;
— один человек не может сидеть за двумя клавиатурами, не разрешим одному UIN присоединяться параллельно из двух мест.
Но мир, разумеется, менялся. Уже в начале двухтысячных люди стали активно работать из дома (а некоторые редкие экземпляры занялись личными делами на работе, но об этом тссс, не будем их выдавать) и контакт-листы переместились на сервер. А в 2011-ом пришла пора изменить и другое правило девяностых.
Потребность общаться с двух устройств в век мобильного Интернета очевидна. Если включать аську утром, приходя на работу, и вечером, вернувшись домой, в общем-то не сложно, то что-то специально нажимать на мобильном, каждый раз отходя от компьютера ради совещания или перекура – идиотизм. А значит, клиент на мобильном должен быть онлайн всегда (PUSH-уведомления, к счастью, позволяют), и как следствие — клиент на PC не должен его “выбивать”. Таким образом, пора забыть сообщение про “Ваш UIN используется на чужом компьютере" или, по крайней мере, существенно его модифицировать.
К сожалению, в этот раз мы не пионеры изменений, смотреть можно уже не только на окружающий мир, но и на то, как функционал реализовали коллеги-конкуренты. Самый интересный вопрос, конечно, какому из клиентов доставлять сообщение, если к серверу их подключено сразу несколько. Доставлять всем – плохо, лишние уведомления раздражают, не доставлять всем – страшно, вдруг нужному-то и не доставим. Если честно, то, на наш взгляд, существующие сейчас решения скорее оставляют вопрос открытым, нежели отвечают на него. XMPP-стандарт дает довольно много указаний, но в самом интересном с практической точки зрения месте пишет следующее:
the server MAY use some other rule (e.g., most recent connect time, most recent activity time, or highest availability as determined by some hierarchy of <show/> values) to choose between them or MAY deliver the message to all such resources. tools.ietf.org/html/rfc3921#section-11
А большинство реализаций, как XMPP-based, так и закрытых, часто отправляют сообщения просто во все доступные соединения – уж точно не потеряется.
Возвращаясь к ICQ. Инфраструктурно мы уже готовы к поддержке нескольких одновременных соединений, код сервера написан, большинство клиентов (включая неофициальные) протестированы, осталось только включить. Единственное, что нас пока останавливает от этого шага – неопределенность с алгоритмом отправки сообщений, или, по сути, решение, какие some other rule были бы максимально удобны пользователям. Желающие помочь с ответом на этот вопрос приглашаются в комментарии. Кроме того, мы уже сейчас можем включить возможность параллельных соединений для отдельных UIN'ов, добровольцы могут прислать свои номера приватно.
Заранее спасибо за помощь!

Придумывая ICQ, его авторы естественно смотрели на окружающий мир (а больше смотреть было не на что, других инстант-мессенджеров в то золотое время не было) и решения принимали соответствующие этому миру:
– никто не работает через Интернет, никому не нужны рабочие контакты дома, давайте хранить контакт-лист на клиенте;
— один человек не может сидеть за двумя клавиатурами, не разрешим одному UIN присоединяться параллельно из двух мест.
Но мир, разумеется, менялся. Уже в начале двухтысячных люди стали активно работать из дома (а некоторые редкие экземпляры занялись личными делами на работе, но об этом тссс, не будем их выдавать) и контакт-листы переместились на сервер. А в 2011-ом пришла пора изменить и другое правило девяностых.
Потребность общаться с двух устройств в век мобильного Интернета очевидна. Если включать аську утром, приходя на работу, и вечером, вернувшись домой, в общем-то не сложно, то что-то специально нажимать на мобильном, каждый раз отходя от компьютера ради совещания или перекура – идиотизм. А значит, клиент на мобильном должен быть онлайн всегда (PUSH-уведомления, к счастью, позволяют), и как следствие — клиент на PC не должен его “выбивать”. Таким образом, пора забыть сообщение про “Ваш UIN используется на чужом компьютере" или, по крайней мере, существенно его модифицировать.
К сожалению, в этот раз мы не пионеры изменений, смотреть можно уже не только на окружающий мир, но и на то, как функционал реализовали коллеги-конкуренты. Самый интересный вопрос, конечно, какому из клиентов доставлять сообщение, если к серверу их подключено сразу несколько. Доставлять всем – плохо, лишние уведомления раздражают, не доставлять всем – страшно, вдруг нужному-то и не доставим. Если честно, то, на наш взгляд, существующие сейчас решения скорее оставляют вопрос открытым, нежели отвечают на него. XMPP-стандарт дает довольно много указаний, но в самом интересном с практической точки зрения месте пишет следующее:
the server MAY use some other rule (e.g., most recent connect time, most recent activity time, or highest availability as determined by some hierarchy of <show/> values) to choose between them or MAY deliver the message to all such resources. tools.ietf.org/html/rfc3921#section-11
А большинство реализаций, как XMPP-based, так и закрытых, часто отправляют сообщения просто во все доступные соединения – уж точно не потеряется.
Возвращаясь к ICQ. Инфраструктурно мы уже готовы к поддержке нескольких одновременных соединений, код сервера написан, большинство клиентов (включая неофициальные) протестированы, осталось только включить. Единственное, что нас пока останавливает от этого шага – неопределенность с алгоритмом отправки сообщений, или, по сути, решение, какие some other rule были бы максимально удобны пользователям. Желающие помочь с ответом на этот вопрос приглашаются в комментарии. Кроме того, мы уже сейчас можем включить возможность параллельных соединений для отдельных UIN'ов, добровольцы могут прислать свои номера приватно.
Заранее спасибо за помощь!