Очереди сообщений POSIX или доменные сокеты Unix для локального IPC - PullRequest
4 голосов
/ 29 декабря 2010

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

Данные, отправленные из команды, невелики, но данные, отправленные сервером команде, огромны (~ 11 МБ). Существующий дизайн в окнах отправляет данные кусками по 65 килобайт с использованием именованных каналов. Сервер должен отправлять данные нескольким командным клиентам одновременно, поскольку обычно выполняется команда с разными параметрами одновременно с разных терминалов.

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

Учитывая два нижеприведенных критерия, какой из них будет лучшим выбором, очереди сообщений POSIX или доменные сокеты unix?

  1. размер (65К) сообщения
  2. данные от нескольких клиентов не должны чередоваться. Только данные, адресованные этому клиенту, должны быть получены клиентом.

Пожалуйста, дайте мне знать, если вам нужно больше деталей.

С уважением, Рохини Чандра

1 Ответ

0 голосов
/ 30 декабря 2010

Звучит так, как будто вы хотите розетку. Настройте сокет на сервере, используя bind, затем, когда каждый клиент подключается к нему, сервер может либо разветвиться для обработки каждого клиента индивидуально, либо использовать команду select для обработки клиентов. Форкинг обычно проще:

  int sock = create and bind the socket to any port

  while (1) {
    int client = accept(sock);
    pid_t pid = fork()
    if (pid == 0) {
       // Handle client command
       exit(0);
    }
  }
...