Я работаю над программой на C++, которая должна иметь возможность отправлять/получать JSON
-полезные нагрузки от произвольного числа других клиентов.
Сначала я попытался реализовать сервис PubNub, но понял, что не могу одновременно получать и публиковать сообщения (даже используя два разных контекста в разных потоках). Мне нужно уметь это делать. Я также обнаружил, что у PubNub слишком большая задержка, на мой вкус.
Я наткнулся на библиотеку ZeroMQ с моделью PUB/SUB
. который удовлетворил бы мои потребности. Но все примеры Я наткнулся на объяснение, как реализовать это таким образом, чтобы один процесс был издателем ИЛИ подписчиком, а не обоими одновременно.
В идеале я хотел бы запрограммировать сервер, который ретранслировал бы все сообщения, приходящие от кого-либо, любому, кто подписался на определенный канал, указанный в сообщении. Каждый человек должен иметь возможность получать и публиковать сообщения любому другому пользователю в сети при условии, что он подписан на правильный канал.
UPDATE 1:
Примечание. Мне не нужна страховка получения, потому что полезная нагрузка N+1 будет иметь приоритет над полезной нагрузкой N. Мне нужно средство связи "отправить и забыть" (типа UDP).
В соответствии с запросом: ограничение PubNub в 32 kB
на JSON
полезной нагрузки было идеальным для меня, мне не нужно больше. Фактически, моя полезная нагрузка в среднем составляет около 4 kB
. Все экземпляры клиентов будут работать в одной и той же локальной сети, поэтому в идеале задержка должна быть меньше 5 ms
. Что касается количества клиентов, то на один и тот же канал/тему одновременно может быть подписано не более 4 клиентов.
UPDATE 2 :
Я не могу заранее предсказать, сколько каналов/тем будет существовать, но их будет порядка десятков (в большинстве случаев), сотен (на пике). Не тысячи.
Вопросы:
Q1:
— Могу ли я реализовать такое поведение с помощью ZeroMQ
?Q2:
— Есть ли рабочий пример, демонстрирующий это (желательно в C++
)?Q3:
- Если нет, есть предложения по библиотеке в C++
?
[ns]
, после которого какое-то решение имеет слишком большую задержку на ваше усмотрение + рабочий оценка верхних границ для произвольного числа других клиентов в[thousands]
+ набор рабочих оценок на { min | Среднее | MAX }-размерыJSON
-полезных данных в[kB]
-- как указано выше в вашем тексте? Спасибо. - person user3666197   schedule 17.05.2016