Шаблон classi c ZeroMQ PUB , это что-то вроде:
- форматирование вашего полного сообщения
- отправка вашего сообщения
- (управляется ZMQ), если есть подписчик на topi c, затем отправьте его, иначе tra sh it?
Что я заметил в одном из моих приложений, так это то, что форматирование некоторых сообщений очень тяжелое и занимает много времени. Когда у меня нет подписчика на topi c, я делаю всю эту работу даром.
Мне было интересно, есть ли способ проверить, подписан ли topi c перед форматированием остальная часть сообщения.
Я понимаю, что возникнет проблема TOCTOU:
1. проверьте, подписан ли topi c (это не так)
2. (ZMQ получает подписку на topi c)
3. данные не отправляются ...
или
1. проверьте, подписан ли topi c (он есть)
2. start форматирование сообщения
3. (ZMQ получает отмену подписки на topi c)
4. отправка в сокет, данные не отправляются (потерянное время)
... и я в порядке с обоими.
Я пробовал с сообщениями, состоящими из нескольких частей (отправив сначала "header / topi c" без форматирования остальной части сообщения), но:
- это похоже, здесь не то, что я имею в виду
- мои подписчики также должны обрабатывать сообщения, состоящие из нескольких частей (могут делать простые zmq_recv()
), что немного раздражает нг
Есть идеи? Я думаю, что вижу, где патчить xpub.cpp
, добавив метод, который будет копировать / вставлять часть xpub::xsend()
(https://github.com/zeromq/libzmq/blob/656205b5f9159677d325cff5e6e26c97f95d8cd7/src/xpub.cpp#L289), но я даже не уверен, что это то, что сообщество ZMQ будет заинтересованы в.