2014-01-30 3 views
1

В моей машине 10 процессов, и каждый из них должен иметь возможность общаться друг с другом. Теперь сценарий - все 10 процессов должны быть в состоянии прослушивания, чтобы любой процесс мог связываться с ним в любое время. Снова при необходимости он должен иметь возможность передать сообщение любому из процессов. Я пытаюсь закодировать его с сокетами C++ и unix tcp/udp. Однако я не понимаю, как его структурировать. Должен ли я использовать UDP или TCP, что было бы лучше? Как процесс может одновременно прослушивать и отправлять данные.многопроцессорное взаимодействие между процессами

Мне нужна помощь.

+0

Асинхронных функции чтения и записи для включения и записи одновременно –

+0

какой среды? * Nix? Окна? –

+0

Как правило, можно создать новый поток для чтения из сокета. –

ответ

0

вы можете запускать каждый процесс как более сильный & span еще 9 потоков для подключения других процессов в качестве клиента.

+0

не могли бы вы уточнить. Я не получаю вас – user3253591

+0

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

1

Решение UDP против TCP зависит от ваших сообщений, нужно ли они быть надежно доставлен и т.д.

Для чистого TCP, каждый узел будет иметь TCP сокет, на котором каждый процесс принимает соединения от других сверстники (и каждый прием приведет к новому сокету). Этот новый сокет является двунаправленным и может использоваться для отправки/получения от одного однорангового узла другому. С помощью этого решения вам понадобится какой-то механизм обнаружения.

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

Механизм обнаружения может быть либо другим одноранговым узлом с хорошо известным (через конфигурацию и т. Д.) Адресом, либо, возможно, вы можете использовать широковещательную рассылку UDP для механизма обнаружения.

С точкой зрения zeroMQ, что немного выше уровень, чем сырые сокеты, вы бы один ROUTER сокета, на котором вы слушаете и ПОЛУЧАТЬ данные, и один DEALER сокета за пэр, на котором вы посылающий данные.

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

0

Этот вопрос относится к любому языку, поэтому ответ не связан с C++.

Если вам нужен выбор, найдите библиотеку, которая будет иметь более легкую связь (например, apache-бережливость).

О TCP/UDP: TCP, как правило, медленнее, но более надежным, поэтому по умолчанию идут TCP, но могут быть причины для выбора UDP, например потоковой передачи, многоадресной рассылки или ... Надежность не может быть проблемой когда все процессы находятся на одной плате, но позже вы захотите обмениваться данными с внешними процессами.

Процесс с резьбой может использовать тот же сокет для отправки и приема без блокировок.

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

0

что вы хотите, похоже сообщение передача.

, прежде чем пытаться построить его самостоятельно, обратите внимание на повышающем

MPI
Смежные вопросы