Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Межпроцессовые коммуникации

21K
26 ноября 2006 года
TNTClaus
6 / / 21.11.2006
Задача стоит такая:
Клиент инициирует соединение с сервером для обмена сообщениями в обе стороны, для соединения создаётся отдельный процесс которому бог велит устанавливать коннектом (если будет обрываться) и организовать общение с сервером.

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

я таких прог никогда не писал, и в общем-то даже не собирался. в сетевом программировании пока полный нуб, помогите советом :)
240
26 ноября 2006 года
aks
2.5K / / 14.07.2006
Исспользуй пайпы. Хотя создавать отдельный процесс на каждый сокет - это не правильно. Лучше создавай на каждое подключение thread. Они все выполняються в одном процессе, не грузят так ОС, и имеют соответственно общее адресное пространство, значит могут полностью взаимодействавть друг с другом через переменные, функциии и т.п.
21K
26 ноября 2006 года
TNTClaus
6 / / 21.11.2006
Цитата: aks
Исспользуй пайпы. Хотя создавать отдельный процесс на каждый сокет - это не правильно. Лучше создавай на каждое подключение thread. Они все выполняються в одном процессе, не грузят так ОС, и имеют соответственно общее адресное пространство, значит могут полностью взаимодействавть друг с другом через переменные, функциии и т.п.



там сокет всего один, а клеенту не до сук ждать пока он соединиться (т.е. пока connect прорубается, ему надо ещё дела делать). :( а подключение у него только одно будет :)

з.ы. fork() - создаёт поток или процесс?

пайпы... уж больно непонятно с ними... вот к примеру, если я exec в дочке какой-то бинарник, то как ей лучше общаться с родительским процессом? в argv бинарник получает несколько параметров, а в stdout рапортует об ошибках/удачном завершении. в этом случае тоже пайпы лучше юзать (допустим как в трубу запихать стандартный вывод я ман вкурю :) ), или заложить в запускаемый бинарник возможность соединиться с локальным соектом, а у родителя запустить поток на прослушку этого сокета, после чего получить всё в сокет, а поток с экзеком убить?

240
26 ноября 2006 года
aks
2.5K / / 14.07.2006
Цитата: TNTClaus
там сокет всего один, а клеенту не до сук ждать пока он соединиться (т.е. пока connect прорубается, ему надо ещё дела делать). :( а подключение у него только одно будет :)


Ну тогда тем более ничего не мешает создать поток который будет ждать подключения и обрабатывать данные.

Цитата: TNTClaus

з.ы. fork() - создаёт поток или процесс?


Процесс. Тоесть грубо говоря отдельную независимую программу в ОС, которая может выполняться вобще без первоночальной.

Цитата: TNTClaus

пайпы...
...
или заложить в запускаемый бинарник возможность соединиться с локальным соектом, а у родителя запустить поток на прослушку этого сокета, после чего получить всё в сокет, а поток с экзеком убить?


На самом деле какая принципиальная разница между исспользованием пайпов и сокетов? И там и там можно утановить соединение и писать/читать данные. У сокетов просто специализация несколько другая (сеть) и шире.

21K
26 ноября 2006 года
TNTClaus
6 / / 21.11.2006
ага, про сетевой сокет понятно - просто попутал процесс с потоком. часто путаю их :)

гм.. про локальные сокеты - они тоже имеют стек, как сетевые сокеты? абсолютно идентично работают?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог