TIdHTTPServer, когда конец соединения

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

TIdHTTPServer, когда конец соединения

Сообщение GAMER » 05.09.2019 12:46:43

Есть TIdHTTPServer от Инди.
Есть событие OnCommandGet. Там происходит много внутренней работы, но при этом клиенту ничего не отправляется.
Когда завершается tcp-соединение в таком случае? Не хотелось бы держать коннект открітім длительное время.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: TIdHTTPServer, когда конец соединения

Сообщение serbod » 05.09.2019 13:56:52

Читаете ARequestInfo что хотят от сервера. Пишете в AResponseInfo ответ. А иначе, как сервер поймет, что ответить?

Там же и CloseConnection есть. А вдруг вы не хотите закрывать подключение, и следом еще запросы пойдут?
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: TIdHTTPServer, когда конец соединения

Сообщение GAMER » 05.09.2019 14:15:48

А если я не хочу писать в AResponseInfo ответ? Нет необходимости. Сразу делать CloseConnection?

Добавлено спустя 42 минуты 43 секунды:
Не знаю, насколько правильно я делаю, но сделал так:
Код: Выделить всё
   
        AResponseInfo.ResponseNo:=200;
        AResponseInfo.ContentText:='<HTML><BODY><B>200 OK</B></BODY></HTML>';
        AResponseInfo.WriteContent;
        AContext.Connection.Disconnect; 
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: TIdHTTPServer, когда конец соединения

Сообщение serbod » 05.09.2019 15:48:22

GAMER писал(а):AContext.Connection.Disconnect;


Закрывать принудительно соединение не обязательно, лучше поставить признак AResponseInfo.CloseConnection := True; и сервер сам его закроет после выхода из обработчика.
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: TIdHTTPServer, когда конец соединения

Сообщение GAMER » 05.09.2019 15:54:26

Спасибо. Решил возвращать AResponseInfo.ResponseNo:=204; Так точнее.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: TIdHTTPServer, когда конец соединения

Сообщение serbod » 05.09.2019 15:56:01

Ответить все же очень желательно, иначе со стороны клиента непонятно, обработан запрос или нет. Даже если ответ в принципе не нужен. Например, вы отправили команду открыть шлагбаум и своими глазами видите результат. В некоторых сетях и платформах могут быть какие-то специальные оптимизации соединений HTTP, и нестандартное поведение может вызвать глюки и сбои. Например, Андроид долгое время держит порт открытым даже после закрытия программы и не дает повторно к нему подключиться.
Аватара пользователя
serbod
постоялец
 
Сообщения: 449
Зарегистрирован: 16.09.2016 11:03:02
Откуда: Минск

Re: TIdHTTPServer, когда конец соединения

Сообщение GAMER » 05.09.2019 16:08:55

странно, но с AResponseInfo.CloseConnection := True; вываливается ошибка. По ходу, оно коректно работает и без этого. Долгую работу вывел в отдельный процес, по-этому соединение закрывается быстро относительно.

Добавлено спустя 32 секунды:
204 неплохой ответ :)
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Google Adsense [Bot] и гости: 44

Рейтинг@Mail.ru