Difference between revisions of "VKontakte/Jabber"

From JaWiki (Jabber/XMPP wiki)
Jump to: navigation, search
(vcard)
(Ошибки на уровне протокола)
 
(24 intermediate revisions by 4 users not shown)
Line 2: Line 2:
  
 
== Общее ==
 
== Общее ==
* Отсутствие [[S2S]] не упоминаем как недостаток, потому что заявлено{{ref|url1}} о планах его открыть.
+
* Отсутствие zlib сжатия.
* Вопрос, зачем потребовалось реализовывать собственное серверное решение (VK XMPP) при наличии успешных проектов — [[ejabberd]], [[Openfire]], [[Prosody]] — остается открытым. {{цитата|После окончания тестирования мы планируем сделать открытым код самого XMPP-сервера ВКонтакте, написанного [http://vkontakte.ru/illarionov Олегом Илларионовым] на {{w|node.js}}.|2=[http://vk.com/pages.php?id=27987544 vk.com/pages.php?id=27987544]}}
+
* Отсутствие [[S2S]] не упоминаем как недостаток, потому что заявлено<ref>[http://twitter.com/vkontakte/status/18439413874 ответ] на [http://twitter.com/vladon/status/18438708179 вопрос]</ref> о планах его открыть.
 
+
* Вопрос, зачем потребовалось реализовывать собственное серверное решение (VK XMPP) при наличии успешных проектов&nbsp;— [[ejabberd]], [[Openfire]], [[Prosody]]&nbsp;— остается открытым. {{цитата|После окончания тестирования мы планируем сделать открытым код самого XMPP-сервера ВКонтакте, написанного [http://vkontakte.ru/illarionov Олегом Илларионовым] на [[node.js]].|2=[http://vk.com/pages.php?id=27987544 vk.com/pages.php?id=27987544]}}
 
Опыт других компаний указывает на то, что готовые решения предпочтительнее - [[Facebook]] выбрал [[ejabberd]], [[LiveJournal]] изначально использовал собственную разработку [[djabberd]], но в последствии мигрировал на [[ejabberd]].  
 
Опыт других компаний указывает на то, что готовые решения предпочтительнее - [[Facebook]] выбрал [[ejabberd]], [[LiveJournal]] изначально использовал собственную разработку [[djabberd]], но в последствии мигрировал на [[ejabberd]].  
 
* Заявлена поддержка TLS, SASL, XEP-0030, XEP-0092, XEP-0012, XEP-0202, XEP-0199, XEP-0158, XEP-0054, XEP-0085.
 
* Заявлена поддержка TLS, SASL, XEP-0030, XEP-0092, XEP-0012, XEP-0202, XEP-0199, XEP-0158, XEP-0054, XEP-0085.
* Изначально изменение статусов в клиенте приводило к изменению статуса на вебе, но в последующем это было выключено.
+
* Изначально изменение статусов в клиенте приводило к изменению статуса на сайте, но в последующем это было изменено. Теперь статус для установки на сайте должен начинаться с точки.
 +
* VK XMPP является прослойкой между VK API и XMPP клиентом.
 +
** Общение напрямую с VK API несколько быстрее и информативнее, особенно в случае ошибок выполнения запросов.
 +
** Весь HTTP трафик запросов остаётся на стороне сервера, что позволяет экономить пользовательский трафик.
  
 
== Особенности ==
 
== Особенности ==
=== vcard ===
+
=== Команды ===
Пример из кода запроса vCard. отправляем
+
VK XMPP сервер поддерживает несколько специальных текстовых команд:
 +
* \history — покажет историю переписки (через пробел можно указать количество отображаемых сообщений)
 +
* \delete — удаляет последнее сообщение
 +
* \en — переводит далее введенный текст на английский язык (Google Translate)
 +
* \ru — переводит далее введенный текст на русский язык
  
<code><iq type="get" to="id4756835@vk.com" id="mir_173"><vCard xmlns="vcard-temp"/></iq></code>
+
=== vCard ===
 +
* Официальный лимит запросов данных - 2-3 в сек (экпериментально до 50)
 +
* Для некоторых пользователей сервер по непонятным причинам может не выдавать vCard до повторной авторизации, никак не информируя об этом соответствующим iq ответом.
 +
* vCard также молча не возвращается если сервер на котором находится аватарка недоступен.
 +
* В качестве image/jpeg может прийти закодированная в base64 страничка HTML 404
 +
* Двойной пробел в ответном iq
 +
* vCard несёт в себе только:
 +
** URL - домен_пользователя.vk.com (нерабочий)
 +
** PHOTO - jpeg 50xN без прогрессии (либо HTML 404)
 +
** UID - vk ID пользователя
 +
* vCard всегда выдает тип изображения image/jpeg. На самом деле вконтактовский значок вопроса это gif. (реплика от ''Евгений Бенну Сагатов'')
  
приходит
+
=== Сообщения ===
 
+
* Официальный лимит отправки сообщений - 3 в сек.
<code?<iq[вот в этом месте два пробела]from='id4756835@vk.com' to='id4698853@vk.com/Miranda' id='mir_173' type='result'><vCard xmlns='vcard-temp'><URL>id4756835.vk.com</URL><PHOTO><TYPE>image/jpeg</TYPE><BINVAL>/9j/4AAQSkZJRgABAQAAAQABAAD</code>
+
* Сообщения самому себе запрещены.
 
+
* Невозможно отправить "0"
В принципе это не выходит за рамки стандарта, но можно долго искать, почему не работает парсер.
+
* Невозможно отправить один и тот же текст подряд повторно (даже разным пользователям)
 
+
* Содержат HTML спец. символы, а также HTML тэг &lt;br&gt;, причём тэг и сами спец. символы также кодируется спец. символами (&amp;amp;lt;br&amp;amp;gt;)
=== Сообщения самому себе ===
+
Запрещены.  
+
  
 
== Ошибки на уровне протокола ==
 
== Ошибки на уровне протокола ==
 +
* presence/x хэш по разности которого нужно определять необходимость загрузки новой аватарки может содержать имя jpeg файла (вместо SHA1 хэша). рассылать хэш это задача клиента, а не серверной части, но поскольку аватарка берется с сервера (а не задается клиентом), то серверная часть принудитель петчит презенсы от клиента, чтобы получилось <presence><show>xa</show><x xmlns><photo>ЗДЕСЬ_ХЕШ</photo></x></presence>.
 +
* Нет прямых iq запросов (невозможно узнать информацию о клиенте собеседника)
 +
* XEP-0085 используется лишь для отметки сообщений как прочитанных (на сайте), в полной же мере (информирование о наборе текста) расширение не поддерживается. XEP-0085 реализован фейково: оповещение приходит во время прочтения на сайте или же отправки оповещения на другой стороне. После этого, последующая отправка пауз и композов к получению этих состояний на другой стороне не приводит.
 +
* Запрос roster'a игнорируется в случае, если у пользователя большое число друзей (экспериментально от 500)
 +
* namespace "jabber:iq:last" (XEP-0012) используется некорректно - возвращает статусное сообщение пользователя.
  
 
== Ошибки в реализации серверной части ==
 
== Ошибки в реализации серверной части ==
Line 31: Line 51:
  
 
== Примечания ==
 
== Примечания ==
# {{note|url1}} [http://twitter.com/vkontakte/status/18439413874 ответ] на [http://twitter.com/vladon/status/18438708179 вопрос]
+
 
 +
<references/>

Latest revision as of 05:30, 12 October 2012

Замечания по реализации Jabber на сервисе «В Контакте».

Общее[edit]

  • Отсутствие zlib сжатия.
  • Отсутствие S2S не упоминаем как недостаток, потому что заявлено[1] о планах его открыть.
  • Вопрос, зачем потребовалось реализовывать собственное серверное решение (VK XMPP) при наличии успешных проектов — ejabberd, Openfire, Prosody — остается открытым.
    После окончания тестирования мы планируем сделать открытым код самого XMPP-сервера ВКонтакте, написанного Олегом Илларионовым на node.js.

Опыт других компаний указывает на то, что готовые решения предпочтительнее - Facebook выбрал ejabberd, LiveJournal изначально использовал собственную разработку djabberd, но в последствии мигрировал на ejabberd.

  • Заявлена поддержка TLS, SASL, XEP-0030, XEP-0092, XEP-0012, XEP-0202, XEP-0199, XEP-0158, XEP-0054, XEP-0085.
  • Изначально изменение статусов в клиенте приводило к изменению статуса на сайте, но в последующем это было изменено. Теперь статус для установки на сайте должен начинаться с точки.
  • VK XMPP является прослойкой между VK API и XMPP клиентом.
    • Общение напрямую с VK API несколько быстрее и информативнее, особенно в случае ошибок выполнения запросов.
    • Весь HTTP трафик запросов остаётся на стороне сервера, что позволяет экономить пользовательский трафик.

Особенности[edit]

Команды[edit]

VK XMPP сервер поддерживает несколько специальных текстовых команд:

  • \history — покажет историю переписки (через пробел можно указать количество отображаемых сообщений)
  • \delete — удаляет последнее сообщение
  • \en — переводит далее введенный текст на английский язык (Google Translate)
  • \ru — переводит далее введенный текст на русский язык

vCard[edit]

  • Официальный лимит запросов данных - 2-3 в сек (экпериментально до 50)
  • Для некоторых пользователей сервер по непонятным причинам может не выдавать vCard до повторной авторизации, никак не информируя об этом соответствующим iq ответом.
  • vCard также молча не возвращается если сервер на котором находится аватарка недоступен.
  • В качестве image/jpeg может прийти закодированная в base64 страничка HTML 404
  • Двойной пробел в ответном iq
  • vCard несёт в себе только:
    • URL - домен_пользователя.vk.com (нерабочий)
    • PHOTO - jpeg 50xN без прогрессии (либо HTML 404)
    • UID - vk ID пользователя
  • vCard всегда выдает тип изображения image/jpeg. На самом деле вконтактовский значок вопроса это gif. (реплика от Евгений Бенну Сагатов)

Сообщения[edit]

  • Официальный лимит отправки сообщений - 3 в сек.
  • Сообщения самому себе запрещены.
  • Невозможно отправить "0"
  • Невозможно отправить один и тот же текст подряд повторно (даже разным пользователям)
  • Содержат HTML спец. символы, а также HTML тэг <br>, причём тэг и сами спец. символы также кодируется спец. символами (&amp;lt;br&amp;gt;)

Ошибки на уровне протокола[edit]

  • presence/x хэш по разности которого нужно определять необходимость загрузки новой аватарки может содержать имя jpeg файла (вместо SHA1 хэша). рассылать хэш это задача клиента, а не серверной части, но поскольку аватарка берется с сервера (а не задается клиентом), то серверная часть принудитель петчит презенсы от клиента, чтобы получилось <presence><show>xa</show><x xmlns><photo>ЗДЕСЬ_ХЕШ</photo></x></presence>.
  • Нет прямых iq запросов (невозможно узнать информацию о клиенте собеседника)
  • XEP-0085 используется лишь для отметки сообщений как прочитанных (на сайте), в полной же мере (информирование о наборе текста) расширение не поддерживается. XEP-0085 реализован фейково: оповещение приходит во время прочтения на сайте или же отправки оповещения на другой стороне. После этого, последующая отправка пауз и композов к получению этих состояний на другой стороне не приводит.
  • Запрос roster'a игнорируется в случае, если у пользователя большое число друзей (экспериментально от 500)
  • namespace "jabber:iq:last" (XEP-0012) используется некорректно - возвращает статусное сообщение пользователя.

Ошибки в реализации серверной части[edit]

Недоработки[edit]

Примечания[edit]

  1. ответ на вопрос