The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Двунаправленная передача через FIFO"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Двунаправленная передача через FIFO"
Сообщение от Андрей Куликов emailИскать по авторуВ закладки on 19-Апр-03, 13:34  (MSK)
    Возможно ли через один FIFO передавать данный между процессами в двух направлениях?
   Ситуация следующая: есть один демон, к нему черех 1 FIFO присоединяються несколько процессов-клиентов, один из клиентов посылает демону запрос на получение некоторых данных, ответ на этот запрос должны получить все клиенты.
   Может быть эту задачу нужно решать не через FIFO ?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Двунаправленная передача через FIFO"
Сообщение от NewComer emailИскать по авторуВ закладки on 28-Апр-03, 12:00  (MSK)
>    Возможно ли через один FIFO передавать данный между
>процессами в двух направлениях?

Конечно! Определите протокол обмена - и вперед.

>   Ситуация следующая: есть один демон, к нему черех 1
>FIFO присоединяються несколько процессов-клиентов, один из клиентов посылает демону запрос на
>получение некоторых данных, ответ на этот запрос должны получить все клиенты.

А как клиенты из одной фифо будут тянуть данные, или каждый - из своего канала? Если первое, то должен заметить, что схема взаимодействия "один-ко-многим" на основе фифо нереализуема - это все равно, что пытаться нескольким курильщикам _одновременно_ курить одну сигарету.

Если 2-е, то:
Мне кажется, что такая схема (один запрашивает - многие получают)несколько отходит от традиционной клиент-серверной "запрос/ответ". Почему бы каждому клиенту не позволить самому запрашивать данные?

Ежели надо уведомлять всех о каком-то событии, то можно строить систему по следующей схеме:
1. Клиент подключается к серверу и говорит: "Уведоми меня о таком-то событии. Я буду слушать на таком-то канале"
2. Сервер отвечает: "ОК, слушай..."
3. Клиент создает свой канал входящих сообщений - фифо, например, - и ждет данные.
4. Сервер, при наступлении события, "извещает" всех "слушателей" по своим каналам (фифо, пайпы, сокеты и др...). А те, в свою очередь, принимают эти данные и обрабатывают их.

good luck.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Двунаправленная передача через FIFO"
Сообщение от Olej Искать по авторуВ закладки on 07-Май-03, 18:51  (MSK)
>    Возможно ли через один FIFO передавать данный между
>процессами в двух направлениях?
>   Ситуация следующая: есть один демон, к нему черех 1
>FIFO присоединяються несколько процессов-клиентов, один из клиентов посылает демону запрос на
>получение некоторых данных, ответ на этот запрос должны получить все клиенты.

Согласно POSIX (а мы ведь хотим следовать стандартам?) канал FIFO - однонаправленный. Только в некоторых UNIX системах (Sun Solaris, кажется) FIFO - двунаправленный... но это - непереносимость.

Лучшее (без сомнений!) руководство по subj - вышедшая в прошлом году в изд-ве "Питер" книга у.Стивенса "UNIX. Взаимодействие процессов" - всё на сплошных примерах - и нет вопросов... О книге см. здесь:
http://qnx.org.ru/forum/viewtopic.php?topic=466&forum=12&31

>
>   Может быть эту задачу нужно решать не через FIFO
>?

Может быть...
Её можно решать практически через любые механизмы IPC: парные FIFO, POSIX-сообщения, socketpair() для UNIX-сокетов (AF_LOCAL)... Почти всё на примерах есть в книге Стивенса.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру