Когда-то давным-давно, в девяностые годы, компьютеры были большими, трава зеленой, а вода мокрой. В эти сказочные времена, у кого-то был Интернет дома, у кого-то на работе, но почти ни у кого его не было и там, и там. А уж Интернета на телефоне не было и вовсе ни у кого. (И люди жили, между прочим! Не правда ли, сложно в это поверить?)
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/ee5/a47/82b/ee5a4782b22cbef41a71a13b931acbaa.png)
Придумывая 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'ов, добровольцы могут прислать свои номера приватно.
Заранее спасибо за помощь!
![image](https://habrastorage.org/getpro/habr/post_images/ee5/a47/82b/ee5a4782b22cbef41a71a13b931acbaa.png)
Придумывая 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'ов, добровольцы могут прислать свои номера приватно.
Заранее спасибо за помощь!