ZeroMQ смешанная модель PUB/SUB DEALER/ROUTER
Мне нужно сделать следующее:
- несколько клиентов, подключающихся к тому же удаленному порту
- каждый из клиентов открывает 2 разных сокета, один
PUB/SUB
другойROUTER/DEALER
(сервер может время от времени отправлять клиентским пульсам другую информацию, связанную с сервером).
Я полностью растерялся, можно ли это сделать в ZeroMQ или нет. Очевидно, что если я могу использовать 2 удаленных порта, это не проблема, но я не понимаю, можно ли выполнить мои настройки с использованием конверта в ZeroMQ. Это можно сделать? Спасибо,
Обновление:
Чтобы уточнить, чего я хочу достичь.
- Несколько клиентов могут общаться с сервером
- Клиенты работают в основном на основе запросов-ответов (на одном сокете)
- Клиенты создают сессионный сокет, что означает, что всякий раз, когда это
тип сокета, необходимо создать отдельный рабочий поток, и с этого времени клиент связывается с этим рабочим потоком в отношении обработки запросов, например, серверный поток не должен блокировать соединение других клиентов при работе с запросом одного из них. клиент - Однако клиенты могут получать случайные сообщения от рабочего потока относительно сердцебиения рабочего.
Обновление 2:
На самом деле я мог бы разобраться. Что я сделал:
- идентифицировать клиентов, очевидно, так
ROUTER/DEALER
используется, например, клиенты действительно являются дилерами, поэтому обеспечивается асинхронная обработка - клиенты отправляют сообщения на единственный локальный порт, где находится маршрутизатор
- маршрутизатор заглядывает в сообщения (вроде ленивого примера пирата), проверяет, приходит ли новый клиент; если да, он выгружается в отдельный поток и соединяет отдельный поток с внутренним
inproc:
" разъем - Маршрутизатор, очевидно, опрашивает интерфейс и интерфейс всех подключенных клиентов и отправляет сообщения туда и обратно.
Что меня беспокоит, так это то, что это избыточное убийство, если я сравниваю это с "обычным" решением для сокетов, где я мог бы ПРЯМО подключить клиента к рабочему потоку (например, рабочий поток мог получить из сокета, открытого клиентом напрямую), следовательно Я мог бы полностью избавиться от маршрутизации.
Что мне не хватает?
1 ответ
Недавно в списке рассылки ZeroMQ обсуждалось мультиплексирование нескольких служб в одном сокете TCP. Предлагаемые решения по сути то, что вы реализовали.
В обсуждении также упоминается Malamute со своими брокерами, которые, по сути, предоставляют платформу, основанную на ZeroMQ, которая также предоставляет необходимую вам функциональность. У меня не было времени самому разобраться, но это выглядит многообещающе.