Pull to refresh

А как ты помог какому-нибудь сообществу хабрачеловек?

Reading time 3 min
Views 1.7K
Представьте ситуацию… Решили вы значит прикрутить какую-нибудь новую технологию к вашему проекту. Поставили всё необходимое, подключили библиотеку, и опа… не работает. И вот вы мучаетесь, ковыряете, а оно всё не работает и не работает. И просидев некоторое время над этой библиотекой, вы решаете просто бросить это дело, скачать аналогичную библиотеку от другой команды и попробовать её.

А может быть всё было не так. Может быть вы очень упорный и целеустремлённый человек и решаете во что бы то ни стало довести дело до конца и помочь в развитии продукта.

Продолжение истории для тех, кому не всё-равно…

Ситуация


Хотим научится работать с RabbitMQ через Zend Framework, используя STOMP протокол. Итак, подключаем нужные классы и сразу встаёт вопрос: а как работать? Гуглим — нету ничего. Ну да ладно, лезем в википедию и находим ссылку на официальный сайт, где есть описание протокола с примерами. По примерам, примерно понимаем в каком порядке и что вызывать, чтобы заработало.

Написали — запрос посылается, но при получении ответа зависает. Ну да ладно, дампим запросы — данные приходят. Смотрим в HEX редакторе что приходит, а потом смотрим в коде, что ожидается. Находим ошибку в парсинге запроса в Zend классе.

Правим, запускаем — неверный логин. Снова дампим запросы, но всё верно и соответствует примеру. Пробуем эмулировать протокол через telnet — те же ошибки. Пробуем убрать пробел после двоеточия в заголовках, то есть:
CONNECT
login:<username>
passcode:<passcode>


Заработало! Ага! Радостно потираем руки и решаем поставить ActiveMQ и проверить самый первый вариант на нём. И, он работает. Ну всё, сейчас-то мы сообщим балбесам из RabbitMQ как надо код писать.

Пишем письмо, получаем ответ:
  • Regarding newlines after the \x00 — that is not part of the spec. It is *permitted* in 1.1, but not even mentioned in 1.0. Since this isn't something the spec requires, I think the Zend client is in error here expecting servers to send a newline that isn't required by the spec.
  • Regarding trimming of header values, this is explicitly banned in 1.1, so we don't support it all. Technically, we could support it for 1.0, but we don't know the version the client is using until *after* the CONNECT frame has been processed. Ideally though, the Zend client would update to 1.1.

То есть: код у вас зависает, потому что Zend класс ожидает последовательность символов, которая не определена спецификацией, и мы их не обязаны посылать. А концевые пробелы в заголовках могут быть полезной информацией, поэтому мы их не обрезаем. И, вообще, мы пишем сервер совместимый со спецификацией 1.1, а ваш Zend поддерживает только 1.0.

Но позвольте, спрашиваю я, а где на официальном сайте написано про протокол 1.1?
Ответ: А это старый сайт, вот тебе ссылка на новый. А также вот тебе два патча, которые подстраивают RabbitMQ под баги Zend`а.

Мы немного ещё попереписывались, чтобы уточнить некоторые детали, и вот, что мы сделали на выходе.

Итоги

  • Мне сделали два патча, которые подстраивают RabbitMQ под баги Zend`а, хотя я даже не просил.
  • Команда RabbitMQ попросила хозяев старого сайта поставить ссылки на новый.
  • В английскую Википедию добавлена ссылка на новый сайт в статью о протоколе STOMP.
  • На Zend было добавлено 3 новых тикета и ещё один проапдейчен.

Послесловие


Во всей этой истории нет ничего сверхъестественного. Я просто лишь хотел показать, что помогать развивать продукты сообщества может каждый. Это доступно и работает. Возможно, вы сможете привести более эпический пример.
Так давайте же по случаю пятницы поделимся с друг другом подобными историями.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+38
Comments 36
Comments Comments 36

Articles