![]() |
Модераторы: Snowy, Poseidon, MetalFan |
![]() ![]() ![]() |
|
T800 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.6.2007 Репутация: нет Всего: 1 |
Сейчаз на серверной стороне использую Indy9. В реализации для каждого нового коннекта создаётся свой поток.
Хочется избавиться от кучи потоков, которые в основном простаивают, т.е. хочется заюзать все преимущества порта завершения. Облазил весь инет, но так и не нашёл применение порта завершения в Delphi проектах. Хотя есть реализации в либе CnPack (NetComm) и Code-CZQ (http://code-czq.googlecode.com/svn/trunk/IUP/ ). В обоих коменты написаны в UTF8 (азия). Вот хочу спросить у здешних постояльцев о существующей полноценной реализации TCP сервера с использованием CreateIoCompletionPort . |
|||
|
||||
Xenag |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 51 Регистрация: 6.3.2010 Репутация: нет Всего: нет |
Ну так потоки для того и простаивают, чтобы не создавать постоянно новые, а использовать одни и те же.
Прибивать потоки имеет смысл только при редких подключениях. Ну а в принципе за поведение отвечает менеджер тредов. |
|||
|
||||
T800 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.6.2007 Репутация: нет Всего: 1 |
Xenag
Сама концепция Indy9 подразумевает синхронную работу (блокирующая система). А концепция пула потока продразумевает асинхронную работу (что мне и нужно). |
|||
|
||||
T800 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 8.6.2007 Репутация: нет Всего: 1 |
Оказывается то что искал есть на torry.net
Вот ссыль: http://www.torry.net/quicksearchd.php?Stri...r&Title=Yes (Freeware) Это HTTP(S) сервер, который использует CreateIoCompletionPort для асинхронной обработки запросов от клиента. Написан сервак очень качественно (вроде бы все нюансы в нём отображены, даже есть поток для ожидания дисконнекта клиентов при завершении работы сервера). Написан сервер русским преверженцем Delphi. Т.е. это полноценная замена Indy (при написании многопоточного сервера). Кстати, поддержка SSL(TLS) в этом сервере реализованы не через либы OpenSSL, а через MSCrypto. Я немного доработал этот сервак: 1) сделал консольную версию из примера автора (правда всё что касается SSL удалил/закоментил, т.к. планирую использовать свой механизм шифрования траффика); 2) сделал полноценный механизм логирования, который не использует виндовых объектов синхронизации (модуль uTempLog.pas). Сам процесс сброса логов в файл и в консоль осуществляется в отдельном потоке. При использовании опции FDebugLog=True возможна такая ситуация при отображении логов:
Т.е. Disconnect отлогировался быстрее чем ProcessBuffer. Это из-за того, что при FDebugLog=True первым делом вызывается Windows.OutputDebugString, которая "тормозит" текущий поток, при этом другие потоки продолжаю работать. В принципе, эта ситуация возможна и при FDebugLog=False , но думаю это не столь критично, т.к. сервак то асинхронный. Вот ссыль на мою версию: http://www.acdev.narod.ru/hpservcon.zip Это сообщение отредактировал(а) T800 - 17.1.2011, 12:15 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Сети" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |