![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
NamedPipe [D6, Win2k]
andrey__ © (2004-11-03 16:26:00)Вопрос такой: Подскажите можно ли после того как произошёл разрыв соединения между сервером канала и клиентом (клиент был закрыт) новому клиенту соединится к этому же экземпляру канала сервера.
kaZaNoVa (2004-11-04 17:41:00) [1]а я обычно на сокетах всё делаю :)))
Игорь Шевченко (2004-11-04 12:45:00) [2]andrey__ (04.11.04 11:38) [5]
Абсолютно разумная идея.
Пример ее реализации можно найти в Рихтер,Кларк "Программирование серверных приложений" или в Platform SDK\Samples\...\Service
Digitman (2004-11-04 12:26:00) [3]
> - одно сервис работает постоянно
> - второе програмка управления работой сервиса (изменение
> параметров работы)
> Общение между приложениями решил организовать посредством
> NamedPipe
это понятно.
ничего против идеи не имею - пайпы значит пайпы ..
> В ней используется асинхронный режим (если у вас есть сомнения
> насчёт того что он плохо подходит для моей задачи прошу
> написать мне об этом).
сомнений у меня никаких нет.
но выбор того или иного режима использования пайпов (да и не только пайпов) как транспортного механизма отнюдь не определяется глобальной логикой приложения, с одинаковым успехом можно использовать и синхронный и асинхронный режимы чего-то там
касаемо выбора упомянутого режима можно лишь дать самые общие рекомендации.
например, в случае если приложение однопоточное и при этом нет гарантий "мгновенности" выполнения требуемых транспортных операций (коннекта/дисконнекта/ввода/вывода), предпочтение следует отдать асинхронному режиму и строить трансп.логику уже с учетом асинхронности трансп.событий ... в противных случаях можно задействовать и синхр.режим, однако ничто не мешает и в этих случаях пользовать асинхронную модель
асинхр.модель (с задействованием механизма уведомлений об одном или более событиях объекта) как нельзя хорошо подходит в случаях, когда трэд не является искл-но транспортным, как, например, основной трэд GUI-процесса, который, как известно, обязан кроме всего прочего ожидать/выбирать/диспетчеризовать/обрабатывать сообщения системы о событиях ввода/вывода пользовательского уровня
andrey__ (2004-11-04 11:38:00) [4]>Digitman © (03.11.04 17:30) [4]
Более подробно опишу свою задачу: 2-ва приложения
- одно сервис работает постоянно
- второе програмка управления работой сервиса (изменение параметров работы)
Общение между приложениями решил организовать посредством NamedPipe
Т.к. информации я нашёл мало по NamedPipe (может плохо искал) отталкивался я в своей работе от статьи http://www.delphimaster.ru/articles/named_pipes/index.html#PageTop (это на случай если вы читали)
В ней используется асинхронный режим (если у вас есть сомнения насчёт того что он плохо подходит для моей задачи прошу написать мне об этом).
Digitman (2004-11-03 17:30:00) [5]
> для соединения нового клиента к освободившемуся экземпляру
> канала сервер повторно должен использовать ConnectNamedPipe(hPipe,
> nil) ?
да, разумеется ... если ты не сделал перед этим Closehandle(hPipe)
насчет nil 2-м параметром - это требует отдельной дискуссии.
> каким образом сервер узнает что его экземпляр канала освободился
все зависит от синхр. или асинхр. режима использования пайпа.
конкретизируй режим.
andrey__ (2004-11-03 17:07:00) [6]подскажи пожалуста как это сделать:
- каким образом сервер узнает что его экземпляр канала освободился
- для соединения нового клиента к освободившемуся экземпляру канала сервер повторно должен использоватьConnectNamedPipe(hPipe, nil)?
Digitman (2004-11-03 16:56:00) [7]
> andrey__ (03.11.04 16:26)
можно.
толькло не забудь сделать экз-ру DisconnectNamedPipe, прежде чем ты сотворишь ему новый ConnectNamedPipe
Игорь Шевченко (2004-11-03 16:40:00) [8]Можно.