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

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

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

Ответить
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

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

Сообщение GAMER »

Есть TIdHTTPServer от Инди.
Есть событие OnCommandGet. Там происходит много внутренней работы, но при этом клиенту ничего не отправляется.
Когда завершается tcp-соединение в таком случае? Не хотелось бы держать коннект открітім длительное время.
Аватара пользователя
serbod
постоялец
Сообщения: 449
Зарегистрирован: 16.09.2016 10:03:02
Откуда: Минск
Контактная информация:

Сообщение serbod »

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

Там же и CloseConnection есть. А вдруг вы не хотите закрывать подключение, и следом еще запросы пойдут?
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

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

Добавлено спустя 42 минуты 43 секунды:
Не знаю, насколько правильно я делаю, но сделал так:

Код: Выделить всё

   
        AResponseInfo.ResponseNo:=200;
        AResponseInfo.ContentText:='<HTML><BODY><B>200 OK</B></BODY></HTML>';
        AResponseInfo.WriteContent;
        AContext.Connection.Disconnect; 
Аватара пользователя
serbod
постоялец
Сообщения: 449
Зарегистрирован: 16.09.2016 10:03:02
Откуда: Минск
Контактная информация:

Сообщение serbod »

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


Закрывать принудительно соединение не обязательно, лучше поставить признак AResponseInfo.CloseConnection := True; и сервер сам его закроет после выхода из обработчика.
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Спасибо. Решил возвращать AResponseInfo.ResponseNo:=204; Так точнее.
Аватара пользователя
serbod
постоялец
Сообщения: 449
Зарегистрирован: 16.09.2016 10:03:02
Откуда: Минск
Контактная информация:

Сообщение serbod »

Ответить все же очень желательно, иначе со стороны клиента непонятно, обработан запрос или нет. Даже если ответ в принципе не нужен. Например, вы отправили команду открыть шлагбаум и своими глазами видите результат. В некоторых сетях и платформах могут быть какие-то специальные оптимизации соединений HTTP, и нестандартное поведение может вызвать глюки и сбои. Например, Андроид долгое время держит порт открытым даже после закрытия программы и не дает повторно к нему подключиться.
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

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

Добавлено спустя 32 секунды:
204 неплохой ответ :)
Ответить