PUB/SUB я могу.connect(), прежде чем я.bind()?

Я использую PUB/ SUB дизайн и мой вопрос:

Могу я .bind() в порт после другого сокета .connect() на это, или я должен .bind() прежде чем другой сокет пытается .connect() по тому же адресу?

Другими словами:

Есть ли порядок .bind() а также .connect() иметь значение?

(Я думаю, что этот вопрос не относится к PUB / SUB но актуально для любого дизайна).

2 ответа

Решение

Основной принцип ZMQ - не беспокоиться о том, есть ли сокет, к которому вы пытаетесь подключиться, уже есть или нет. Это детали, которые ZMQ пытается абстрагироваться от вас, разработчика. Итак, нет, порядок bind() а также connect() не имеет значения для любого типа сокета.

Я предлагаю вам прочитать руководство по zmq, если вы планируете проделать большую работу с ним, соответствующую часть здесь:

Помните, что ZeroMQ выполняет асинхронный ввод-вывод, т. Е. В фоновом режиме. Скажем, у вас есть два узла, которые делают это в следующем порядке:

  • Абонент подключается к конечной точке и получает и считает сообщения.
  • Издатель связывается с конечной точкой и немедленно отправляет 1000 сообщений.

Тогда, скорее всего, абонент ничего не получит. Вы будете мигать, убедитесь, что вы установили правильный фильтр, и повторите попытку, и подписчик все равно ничего не получит.

... здесь есть важный момент для PUB/SUB - даже если вы connect() сначала с вашим подписчиком, это соединение на самом деле не происходит до тех пор, пока издатель не bind() -ed, поэтому, если вы попытаетесь отправить сообщения своему издателю, не дожидаясь, пока ваш подписчик завершит соединение, эти сообщения никогда не будут переданы вашему подписчику.

Это зависит от одноадресного транспорта, tcp:// а также ipc:// транспортные классы отключены, поэтому порядок .bind() а также .connect() не имеет значения.

Но inproc:// транспортный класс подключен, поэтому есть необходимость .bind() сначала, а потом .connect(),

http://zguide.zeromq.org/page:all

Другие вопросы по тегам