zeromq pub/sub pattern, слушатель всегда использует занятый цикл для проверки сообщения?
Я новичок в ZeroMQ
Я видел несколько примеров, кажется, всегда вовлекает слушателя, чтобы сделать занятый цикл, чтобы получить сообщение, например, в pub/sub
шаблон. получатель должен будет сделать это, чтобы получить сообщение,
while (true)
{
var message = socket.Recv(Encoding.UTF8);
message.Dump();
}
Существует ли какой-либо механизм обратного вызова, например, получатель просто зарегистрирует себя в сокете, и всякий раз, когда есть сообщение, оно будет вызываться, вместо того, чтобы заниматься циклическим проверкой сообщения.
1 ответ
Зависит от вашего выбора языка. Если, например, вы используете node.js, все это обратные вызовы.
Вы не указываете свой язык или то, что происходит в вашем приложении. Как правило, ваша стратегия будет зависеть от общего характера вашего приложения.
Причина, по которой вы обычно видите цикл, который сосредоточен исключительно на получении сообщений, двояка:
- Это примеры, и это самый простой способ написать пример, который будет эффективно получать и обрабатывать сообщения.
- ZMQ - это набор инструментов большого объема, обычно, когда вы используете его, получение сообщений является для вас задачей с высоким приоритетом, поэтому выделение всей цепочки для получения этих сообщений может быть хорошей идеей.
Тем не менее, если вы можете определить какой-то более крупный цикл в вашем приложении, чтобы вы могли получать сообщения один раз или только периодически в течение, вы можете просто делегировать задачу этому большему циклу. Скажем, что-то вроде (psuedocode):
while (functional_task) {
while (msg = socket.recv()) {
handle(msg);
}
do_other_stuff();
}
... таким образом, вы обрабатываете все поставленные в очередь сообщения один раз за функциональный цикл, а не зацикливаетесь исключительно на ваших сообщениях.
Возможность использования системы обратного вызова зависит от вашего языка и привязки ZMQ.