Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];

Вниз

Корректно и абсолютно закрыть ИНДИ сервер   Найти похожие ветки 

 
Kacnep ©   (2006-07-24 13:18) [0]

Ув. Мастера, работает некий инди сервер.
К нему за время работы подключались отключались некие клиенты.
Теперь мне нужно по закрытию программы сначала корректно закрыть инди сервер

ИНДИСервер.Active:=false;

Зависает и не отрабатывает.
Дальше программа должна завершить свою работу.
Вот конкретный проект закрытия
http://delphimaster.net/view/6-1153725024/
Может у кого нить из Мастеров есть пример как они в своих приложениях завершают работу своих программ?


 
Reindeer Moss Eater ©   (2006-07-24 13:20) [1]

Все, что нужно сделать - прервать выполняющиеся синхронные методы чтения/записи. Смотри в сторону таймаутов.


 
Kacnep ©   (2006-07-24 13:21) [2]

Забыл добавить.
Если у кого есть желание пообщаться напрямую ОНЛАЙН
добро пожаловать ICQ 70015922


 
Kacnep ©   (2006-07-24 13:23) [3]

2 Reindeer Moss Eater
Так какое может быть чтение если команда на сервер пришла - он отправил ответ и ждет?
Вроде бы после каждого такого сеанса команда ответ - отправлялся дисконнект на клиента. Т.е. вроде бы соединений быть не дОлжно!
Ничего не понимаю :((


 
Reindeer Moss Eater ©   (2006-07-24 13:41) [4]

он отправил ответ и ждет?

Ждет-то читая наверное?


 
Каспер   (2006-07-24 18:28) [5]

ЛЮЮЮДИ сос!!!
Это уже истерика!
Не обязательно спецы! ВСЕ! Кто что либо когда либо писл на ИНДИ?!
Скажите как вы закрывали Инди сервер? ОН ВИСИТ!!! Если никто никогдда не цеплялся к серверу то Актив=фалсе работает на ура! Если хоть раз кто нить зацепился -все! Висяк!
Кто нить что нить может сказать по поводу?
Неужели у вас никогда не возникала такая ситуация?
Приведите пример своих завершений ИНДИ!
ПЛИИЗ!
Почти 12 часов рыл. Бесполезно!


 
Reindeer Moss Eater ©   (2006-07-24 18:35) [6]

Тебе все уже сказано.
У тебя используются CommandHadler"ы.
Это значит, что сервер все свое "свободное" время читает клиента и прочитав данные парсит их, ища сами команды.
Методы чтения - синхронные.
Вот они-то и виноваты в твоих висяках.


 
umbra ©   (2006-07-24 19:51) [7]

а сервер после получения команды shutdown отключает клиента, который эту команду прислал?


 
Каспер   (2006-07-24 21:26) [8]

2 umbra ©   (24.07.06 19:51) [7]
Да! Отключает! Двумя вариантами пробовал.
Если команду выполняет -у нее есть свойство - после прихода дисконнект -это в свойстве есть.
И второй вариант принудительно сам дисконектил - пофиг :((.
Посмотри ссылку на другой мой вопрос. в этом топике она в первом посте.
Там подробный код отключения моего :(.

2 Reindeer Moss Eater
У меня приходит только одна комманда! Т.е. он все время слушает! Так как его загасить?
Плиз! Кусок кода? Хоть что нить! Посмотри на время - скоро сутки как я пытаюсь определить как отрубить ЭТО?!
Плииз!

2 ОЛЛЛ!!
ЛЮДИ ну киньте не пожадничайте свои версии гашения ИНДИ серверов!
:((

Спасибо


 
Slym ©   (2006-07-25 06:16) [9]

Server.Free;


 
Kacnep ©   (2006-07-25 06:30) [10]

После этого поновой придется создавать экземпляр ИНДИ сервера :((


 
Slym ©   (2006-07-25 06:43) [11]

Kacnep ©   (25.07.06 6:30) [10]
Зачем? Ты же всеравно Application.Terminate;


 
Kacnep ©   (2006-07-25 06:47) [12]

Ну если ТАК отталкиваться то ХАЛЬТ и все :)))
Но ведь это не корректно!!!! :((
Самое интересное что мало народа отвечает - а ведь инди используется многими и неужели такого вопроса не вставало?
Скажем по нажатию кнопки отключить инди сервер и по закрытию программы сначала отключить сервер а потом уже ее закрыть :(((.
Если к серверу не коннектиься народ то гаситься все на ура - если были подключения - И ДАЖЕ НОРМАЛЬНО дисконнектились - ВСЕ!

ИНДИСервер.Active:=false;

ТУПО ВИСНЕТ!
Ни эксепшена - ни чего! Код который идет потом не выполняется!


 
Kacnep ©   (2006-07-25 07:41) [13]

После полутора суток диких экспрементов и прочтения всего круглого стола программа заработала.
Был сделан вывод
1. Перед гашением ИНДИсервера - отключать ВСЕ соединения
2. После отключения каждого соединения ждать - убеждаться что оно завершено!!! - это получилось тупым СЛИПОМ(2000)

А вот первое в Инди 10 так и не нашел.
В общем корявенькое такое решение. :(


 
Reindeer Moss Eater ©   (2006-07-25 08:26) [14]

У меня приходит только одна комманда! Т.е. он все время слушает! Так как его загасить?

Какая разница сколько приходит команд?
Каждая нить твоего сервера постоянно пытается читать клиентское соединение чтобы преподнести на блюдечке тебе событие.
Вот и вся причина.


 
Kacnep ©   (2006-07-25 08:51) [15]

Возможно.
Но когда я сказал обрубиться нити - будь так добра!
Сейчас обработчик гашения выглядимт так.
1 Приходит коанда
2 Устанавливаеться параметр МАСТШатдаун
3 Дисконектиться пользователь приславший команду
4 На собитии дисконекта пользователя -Если установлена команда МАСТШатдаун - Закрывать приложение
5 Жду 2 сек
6 На событии ЗапросЗакрытия Гашу сервер
7 Закрываю приложение
Вот так все работает :(


 
Reindeer Moss Eater ©   (2006-07-25 08:55) [16]

А кому интересен твой флаг, если первичное чтение клиента организовано не тобой, а кодом самого сервера? Никому.


 
Kacnep ©   (2006-07-25 10:27) [17]

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


 
umbra ©   (2006-07-25 10:48) [18]

а нужно ли сохранять соединение с клиентом, приславшим команду? Если нет, то не лучше ли сразу отключать его в обработчике?

procedure TForm1.IdCmdTCPServer1CommandHandlers0Command(
 ASender: TIdCommand);
begin
 {...............................}
 ASender.Context.Connection.Disconnect;
 {.......................................}
end;


 
Reindeer Moss Eater ©   (2006-07-25 11:59) [19]

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

Флаг для кого? Для своего кода. Так как только твой код этот флаг анализирует.
А проблема в чем? забыл?
В синхронно выполняющемся методе чтения, который написан не тобой и которому на флаг твой - с высокой колокольни.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.04 c
2-1164625210
Krants
2006-11-27 14:00
2006.12.17
Назначить событие всем компонентам


1-1162646727
Psychedelic
2006-11-04 16:25
2006.12.17
Проблема форума delphimasters


2-1164738540
Hollander
2006-11-28 21:29
2006.12.17
Не могу прочитать файл ;-)


2-1164784280
RebroFF
2006-11-29 10:11
2006.12.17
Формат отображения данных в DBEdit


15-1164309547
Kolan
2006-11-23 22:19
2006.12.17
Под какие цели искать сотрудников.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский