Intereting Posts
Чтение матрицы 3×3 из файла, а затем ее отображение в C Статическое выделение огромных объемов памяти внутри основной функции Конкатенация строки с собой два раза дает ошибку сегментации сравнить 2 числа с сборкой не может генерировать файл ядра после изменения пользователя от root до никого на языке c Инициализация массивов в C ++ Копирование переменных одной внутренней структуры в другую внутреннюю структуру с использованием функции, которая принимает адрес одной внутренней структуры как параметр несоответствие типа операндов fstcw Что такое разностный узел * node1 vs node * node1? Переименование символов во время компиляции без изменения кода на кросс-платформенном пути Почему это 0 в ((type *) 0) -> член в C? Разница между char и char * в C C Макро для защиты определений Почему fread () останавливается на строке 0s? Использование GOTO для FSM в C

Проектирование с использованием fork () и TCP-соединения в C

У меня есть вопрос относительно того, как создать следующую систему:

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

В настоящее время сервер работает в UNIX и имеет разветвленные соединения. Они работают самостоятельно.

Я хочу сказать, что родитель (на сервере) отправил эту информацию, и теперь пришло время ее обработать. Как мне это сделать ?

Я думаю о возможных способах этого:

  1. Используя signal() в Unix, чтобы каким-то образом сообщить родителям, что что-то случилось
  2. Преобразовать в streamи и использовать некоторые функции ожидания и уведомления

Сигнал предпочтительнее, но я не могу понять, как это сделать эффективно. Потому что в моей системе может случиться следующее:

  • Если все клиенты успешно отправили информацию своим дочерним серверам, как я могу сказать родителям, что я готов в эффективном режиме? Не знаю / Я не уверен, как он их обработает.
  • Сервер может не получать информацию от всех клиентов. Поэтому родитель должен ждать некоторое время для всех детей, но не слишком долго. Так что я угадываю какой-то таймер?

Не используйте вилку и не используйте сигналы. Используйте пул streamов .

Как насчет Unix Domain Socket для взаимодействия между процессами между детьми и отцом?

http://en.wikipedia.org/wiki/Unix_domain_socket

Как только ребенок получает данные через TCP-соединение, те же данные будут отправлены процессу отцов через Unix-домен Socket, и последний процесс будет немедленно уведомлен