Решение UDP против TCP зависит от ваших сообщений, нужно ли они быть надежно доставлен и т.д.
Для чистого TCP, каждый узел будет иметь TCP сокет, на котором каждый процесс принимает соединения от других сверстники (и каждый прием приведет к новому сокету). Этот новый сокет является двунаправленным и может использоваться для отправки/получения от одного однорангового узла другому. С помощью этого решения вам понадобится какой-то механизм обнаружения.
Для UDP это почти то же самое, за исключением того, что вам не нужен сокет accept. Вы все еще нуждаетесь в некотором виде механизма обнаружения.
Механизм обнаружения может быть либо другим одноранговым узлом с хорошо известным (через конфигурацию и т. Д.) Адресом, либо, возможно, вы можете использовать широковещательную рассылку UDP для механизма обнаружения.
С точкой зрения zeroMQ
, что немного выше уровень, чем сырые сокеты, вы бы один ROUTER
сокета, на котором вы слушаете и ПОЛУЧАТЬ данные, и один DEALER
сокета за пэр, на котором вы посылающий данные.
Независимо от решения вам может понадобиться поток для обработки сетевых подключений с использованием poll() или что-то в этом роде, и по мере получения сообщений вам понадобится другой поток (или пул потоков) для обработки сообщений.
Асинхронных функции чтения и записи для включения и записи одновременно –
какой среды? * Nix? Окна? –
Как правило, можно создать новый поток для чтения из сокета. –