Я реализую высокопроизводительный двусторонний протокол на C ++ 14, использующий многопоточность, и в настоящее время использую ZeroMQ в качестве сетевого уровня.
Приложение имеет следующую простую архитектуру:
- Одна основная роль сервера,
- Один главный клиент-роль,
- И сервер, и клиент порождают фиксированное количество
n
потоков. - Все
n
параллельныепараллельные пары потоков выполняют некоторую производительность и интенсивный обмен по взаимному, но исключительному протоколу, т.е. они выполняютсяn
фиксированными парами и не должны смешивать / обмениваться какими-либо данными, кроме попарного фиксированного оппонента .
В моем текущем проекте используется один экземпляр ZeroMQ Context()
как для server
, так и для client
, который используется всеми n
-локальными потоками, и каждая соответствующая пара потоков _8 _ / _ 9_ создает _10 _ strong > socket (я просто увеличиваю номер порта) в локальном общем контексте для связи.
Мой вопрос
Есть ли более разумный или более эффективный способ сделать это?
то есть: есть ли естественный способ использования ROUTERS
и DEALERS
, который может повысить производительность?
У меня нет большого опыта программирования сокетов, и при моем подходе количество сокетов масштабируется напрямую с помощью n
(количество пар потоков клиент-сервер). Это может пойти на пару тысяч, и я не уверен, проблема это или нет.
Я контролирую как серверные, так и клиентские машины и исходный код, и у меня нет внешних ограничений, о которых мне нужно беспокоиться. Все, что меня волнует, - это производительность.
Я просмотрел все шаблоны здесь, но я не могу найти никого, который соответствовал бы случаю, когда пары клиент-сервер фиксированы, т.е. я не могу использовать балансировку нагрузки и тому подобное.