ZeroMQ смешанная модель PUB/SUB DEALER/ROUTER

Мне нужно сделать следующее:

  • несколько клиентов, подключающихся к тому же удаленному порту
  • каждый из клиентов открывает 2 разных сокета, один PUB/SUB другой ROUTER/DEALER (сервер может время от времени отправлять клиентским пульсам другую информацию, связанную с сервером).

Я полностью растерялся, можно ли это сделать в ZeroMQ или нет. Очевидно, что если я могу использовать 2 удаленных порта, это не проблема, но я не понимаю, можно ли выполнить мои настройки с использованием конверта в ZeroMQ. Это можно сделать? Спасибо,

Обновление:

Чтобы уточнить, чего я хочу достичь.

  • Несколько клиентов могут общаться с сервером
  • Клиенты работают в основном на основе запросов-ответов (на одном сокете)
  • Клиенты создают сессионный сокет, что означает, что всякий раз, когда это
    тип сокета, необходимо создать отдельный рабочий поток, и с этого времени клиент связывается с этим рабочим потоком в отношении обработки запросов, например, серверный поток не должен блокировать соединение других клиентов при работе с запросом одного из них. клиент
  • Однако клиенты могут получать случайные сообщения от рабочего потока относительно сердцебиения рабочего.

Обновление 2:

На самом деле я мог бы разобраться. Что я сделал:

  • идентифицировать клиентов, очевидно, так ROUTER/DEALER используется, например, клиенты действительно являются дилерами, поэтому обеспечивается асинхронная обработка
  • клиенты отправляют сообщения на единственный локальный порт, где находится маршрутизатор
  • маршрутизатор заглядывает в сообщения (вроде ленивого примера пирата), проверяет, приходит ли новый клиент; если да, он выгружается в отдельный поток и соединяет отдельный поток с внутренним inproc: " разъем
  • Маршрутизатор, очевидно, опрашивает интерфейс и интерфейс всех подключенных клиентов и отправляет сообщения туда и обратно.

Что меня беспокоит, так это то, что это избыточное убийство, если я сравниваю это с "обычным" решением для сокетов, где я мог бы ПРЯМО подключить клиента к рабочему потоку (например, рабочий поток мог получить из сокета, открытого клиентом напрямую), следовательно Я мог бы полностью избавиться от маршрутизации.
Что мне не хватает?

1 ответ

Решение

Недавно в списке рассылки ZeroMQ обсуждалось мультиплексирование нескольких служб в одном сокете TCP. Предлагаемые решения по сути то, что вы реализовали.

В обсуждении также упоминается Malamute со своими брокерами, которые, по сути, предоставляют платформу, основанную на ZeroMQ, которая также предоставляет необходимую вам функциональность. У меня не было времени самому разобраться, но это выглядит многообещающе.

Другие вопросы по тегам