![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с использованием TServerSocket в ServiceApplication !!! [NT4, Win2k, WinXP]
AlexAn © (2002-08-19 09:42:00)Может кто-нибудь сталкивался с проблемой:
Серверный неблокирующий сокет работает в сервисе, при попытке клиента подключиться, соединение устанавливается от 10 до 20 сек., т.е. Accept срабатывет примерно после 15 сек. с момента вызова Connect у клиента. ?
Причем если весь этот алгоритм запихнуть не в TServiceApplication а в обычный TApplication, то проблем нет.
Еще есть один нюанс - с той же машины на которой стои сервис клиент соединяется моментально.
Если у кого есть какие-либо соображения по поводу, как решить эту проблему - мыльте плз.
Digitman (2002-08-26 13:44:00) [21]
> думаю попробовать через SockEvent
Это - наилучший вариант для блокирующих гнезд в доп.потоках.
Посложнее, конечно, будет, но зато ты уже не зависишь никоим образом от очередей и диспетчеров оконных сообщений
AlexAn (2002-08-26 13:03:00) [22]По поводу первого пункта у меня и есть несколько вопросов:
- во-первых, почему такая проблема возникает только в сервисе, обычное приложение работает нормально?
- почему все остальные Message-и проходят нормально, кроме FD_ACCEPT?
- TIdSever - блокирующий, а мне нужно именно без блокировки
я сейчас переаисываю все это на API, причем к каждому SOCKET вешаю свое окно со своим потоком, так чтобы они не пересекались. Посмотрим, что из этого получиться. Если не пойдет через оконную процедуру, думаю попробовать через SockEvent - тоже наверное вариант ;-)
!!! Но вообще-то обидно, потому-как в хелпе по дефам приведен пример для неблокирующего сока под сервис и есл его передрать один к одному, то такая ф-ня получается!!!
приходится тратить время на обдумывание
Digitman (2002-08-21 18:03:00) [23]
> - почему они не возникают при 1-ом коннекте
Если TServerSocket работает в режиме stNonBlocking, это может быть вполне объяснимо тем, что при поступлении запроса на очередной коннект сервер занят обработкой прочих сообщений, и Accept() стоит в очереди.
> - почему TIdServer нормально работает
Не берусь утверждать (не рассматривал попросту TIdServer детально), но не исключено, что именно по вышеуказанной же причине : режим TIdServer по-умолчанию может быть и ThreadBlocking.
> я не использую имя, а адресс !!!
Тогда DNS вроде бы отпадает. Тем более - обрати серьезное внимание на режим работы серверного компонента
AlexAn (2002-08-21 17:55:00) [24]это конечно могло бы быть похоже на DNS проблемы, только:
- почему они не возникают при 1-ом коннекте
- почему TIdServer нормально работает
- я не использую имя, а адресс !!!
проблема не в этом
Digitman (2002-08-19 11:54:00) [25]Что-то похожее на проблемы с DNS.
При работе TServerSocket в составе service application на другой машине ping по имени целевого хоста с клиентской машине какие временные результаты дает ?