IPC между сервером и многими клиентами в Mac OS X - PullRequest
0 голосов
/ 18 января 2012

У меня следующий сценарий:

Сервер должен быть Daemon.Другие приложения должны быть клиентами.Многие клиенты должны взаимодействовать с сервером, чтобы выполнить свою задачу сервером одновременно.Это такие задачи, как копирование файла, удаление файла и т. Д.

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

Насколько я знаю, каналы на Mac OS x являются однонаправленными и не имеют возможности созданиянеограниченное количество экземпляров, таких как Windows.

Какой механизм лучше всего подходит для такого рода общения?

Спасибо, Вайбхав.

1 Ответ

1 голос
/ 18 января 2012

Насколько я знаю, каналы на Mac OS x являются однонаправленными, и у них нет возможности создавать неограниченное количество экземпляров, таких как Windows.

Трубы однонаправленные, а Unix-сокеты - нет. Это, вероятно, то, что вам нужно, если вы хотите напрямую перенести код на OS X.

Однако, возможно, есть лучшие способы сделать то, что вы хотите сделать, включая такие вещи, как Распределенные объекты , которые, я признаю, я никогда не использовал. Даже если вы придерживаетесь интерфейса сокетов, я думаю, что один сокет будет проще, если поток контролирует сокет и передает работу рабочим потокам по мере их поступления, используя listen и accept . А еще лучше, если у вас есть NSOperationQueue или очередь отправки для выполнения работы, тогда ОС выполнит задачу оптимизации числа потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...