Схема связи для n рабочих процессов с использованием именованных каналов - PullRequest
1 голос
/ 20 декабря 2011

Я новичок в IPC, использующий каналы, и я не знаком с обычными шаблонами.Вот настройка, с которой мне приходится иметь дело: Есть клиентский процесс, который распределяет работу по n серверным процессам.После завершения серверы должны отправить свои результаты обратно на сервер.Объем работы, который должен быть распределен, известен с самого начала.

Client
  |__Pipe 1_____ Server 1
  |
  |__Pipe 2_____ Server 2
  |
  |__ ...

Вот моя идея, как с этим справиться: Серверы запускаются с аргументом командной строки, определяющим имя канала, который онидолжен создать при запуске.Затем клиент пишет в эти каналы для распределения работы.Когда серверы заканчивают свою работу, они записывают свои результаты в канал, из которого они получили работу.Клиент ожидает от n потоков результатов с серверов.Когда все результаты получены, частичные результаты собраны.

Как вы думаете, это имеет смысл?Видите ли вы преимущества в использовании одной трубы в одном из направлений?Как бы вы синхронизировали доступ?У вас есть советы по чтению?

1 Ответ

1 голос
/ 20 декабря 2011

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

Таким образом, вы можете иметь один именованный канал, который имеет десять серверов, которые его слушают, и когда клиенты запрашивают соединение, они будут назначены.доступный сервер, обеспечивая тем самым своего рода базовый механизм балансировки нагрузки.Вы также можете иметь один клиент, открывающий несколько подключений к одному и тому же именованному каналу, и поэтому каждое подключение будет подключаться к отдельному экземпляру сервера.

Таким образом, ответы будут предоставлены для установленного подключения, но вы выиграли 'необходимо управлять и координировать имена каналов между серверами и клиентом.

...