Arhn - архитектура программирования

Шаблон Lazy Pirate с реальными данными запроса

Я изучаю zmq с привязкой PyZMQ, и у меня проблемы с шаблоном Lazy Pirate. Итак, вот код для сервера Lazy Pirate и Клиент Lazy Pirate.

В примере клиент отправляет запрос, но это просто номер. Как я могу сделать реальный запрос с текстовыми данными и сохранить реализацию шаблона?

Кроме того, я не очень понимаю переменную sequence в клиентском коде - она ​​бесконечно увеличивается => не произойдет ли сбой python, когда sequence достигнет максимума переменной int?

25.04.2013

Ответы:


1

Начнем с того, что переменная sequence в коде по сути является идентификатором сообщения. Есть два способа, при которых одна попытка запроса может потерпеть неудачу:

  1. Сообщение запроса может просто никогда не отправляться
  2. Сообщение запроса отправляется, но клиент устает ждать и истекает, прежде чем ответ вернется к нему.

Во втором случае, если у вас нет числа sequence, вы не знаете, какой из ваших запросов на самом деле был успешным.

Рассмотрим эту историю клиента:

  • Отправить запрос №1
  • Тайм-аут
  • Отправить запрос №2
  • Тайм-аут
  • Отправить запрос №3
  • Получить ответ

Какой запрос вызвал ответ? Это может быть любой из трех запросов из-за второго типа отказа запроса, упомянутого выше. С числом sequence в ответе мы можем точно знать, какой запрос обрабатывается сервером.

Идея «Искаженного ответа от сервера» в образце клиента заключается в том, что если клиент находится на запросе № 3 (с истечением времени ожидания на запросы № 1 и № 2), он отбрасывает ответы № n (где n ‹ 3) пока не дойдет до ответа №3, который он принимает.

Чтобы отправить больше, чем порядковый номер, используйте формат сериализации и отправьте объект целиком.

Например, я мог бы определить class MyRequest { int sequence; string text; }, а затем отправить это как JSON на сервер.

Бесконечно увеличивающуюся переменную sequence можно заменить на int64, и тогда все будет в порядке, или вы можете сделать что-то вроде использования GUID в качестве идентифицируемого запроса.

26.04.2013
  • Приведенный выше ответ неверен во многих отношениях. Во-первых, как четко заявляет Хинтдженс на стр. 147 в книге O'Riely ZeroMQ... Клиент упорядочивает каждое сообщение и проверяет, возвращаются ли ответы точно по порядку: что никакие запросы или ответы не теряются, и ответы не возвращаются более одного раза. или вышел из строя. ... Вам не нужны порядковые номера в рабочем приложении; они просто помогают нам доверять нашему дизайну. Итак, из первых уст, Sequence # просто для того, чтобы убедить вас, что это работает, он не играет никакой роли в обеспечении надлежащего возврата с сервера. 04.01.2014
  • Кроме того, идея искаженного ответа от сервера не имеет ничего общего с подсчетом возвратов и обеспечением их правильного порядка. Это делается автоматически ZeroMQ. Это сообщение об ошибке находится в предложении }else{, проверяющем наличие строки NULL, возвращаемой из char *reply = zstr_recv(client). IE: Это просто сообщение WTF, указывающее, что по какой-то необъяснимой причине zstr_recv() вернул строку NULL. 04.01.2014
  • @user2548100 user2548100 С помощью пары REQ-REP ZeroMQ гарантирует, что никакие сообщения не будут удалены или не в порядке, даже если достигнуто HWM, правильно. Если вы переключитесь на что-то вроде ROUTER-ROUTER, это уже не так, потому что сообщения могут сбрасываться на HWM. Шаблон, показанный в примере, на который ссылается OP, обобщает типы асинхронных сокетов, поэтому я ответил так, как ответил. Конечно, если вы придерживаетесь REQ-REP, все очень просто и вам это не нужно. 04.01.2014
  • @user2548100 user2548100 Я широко использовал ZMQ. Сказать, что ответ неверен в большинстве случаев, немного экстремально. 04.01.2014
  • Вопрос ОП был не о голых сокетах. Весь смысл использования системы обмена сообщениями заключается в гарантированной доставке. Вы ответили на какой-то вопрос, но не на тот, который задал ОП. Мне жаль, что вы не можете проглотить свою гордость и заявить о себе, потому что кто-то будет введен в заблуждение вашим ответом. 09.01.2014

  • 2

    К сожалению, ответ Тимоти Шилдса выше на 100% неверен. Вы можете прочитать комментарии Хинтьена в этой бесплатной версии его книги Code Connected Volume 1. . Важный бит со страницы 141 выглядит следующим образом...

    Клиент упорядочивает каждое сообщение и проверяет, возвращаются ли ответы точно по порядку: никакие запросы или ответы не теряются, а ответы не возвращаются более одного раза или не по порядку. Запустите тест несколько раз, пока не убедитесь, что этот механизм действительно работает. Вам не нужны порядковые номера в рабочем приложении; они просто помогают нам доверять нашему дизайну.

    Интересное обсуждение того, как может выйти из строя открытый TCP, находится здесь хорошее обсуждение. Прочитайте комментарии. Я не сомневаюсь, что Тим очень хорошо осведомлен, он просто ошибся, не распознав, что ленивый пиратский шаблон, в частности, ТОЛЬКО использует REQ-REP, и поэтому он более надежен, чем предполагают его комментарии.

    06.01.2014
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..