Здравствуйте, Anton Batenev, Вы писали:
AB>Здравствуйте, Tessi, Вы писали:
T>> Я хочу сделать в своем клиенском приложении поддержку keep-alive (знаю, что сервер опцию поддерживает).
AB>Судя по описанию, ты хочешь http keep-alive, а не tcp keep-alive (который ты пытаешься включить через SO_KEEPALIVE).
Да, сервер требует http Keep-Alive.
Мы посылаем в хедере Connection: Keep-Alive и сервер успокоился. Но настоящей поддержки Keep-Alive нет, т.к. если нужно всегда использовать создаенное соединение, отслеживать, живо ли оно и прочее — это потребует переписывать код
Ну и внутри же все равно сокеты.
Из описания: The Hypertext Transfer Protocol uses the keyword "Keep-Alive" in the "Connection" header to signal that the connection should be kept open for further messages.
Это для сервера означает, чио нужно держать соединение.
И остается тот же вопрос — для обеспечения Keep-Alive коннекшена со стороны клиента требуется всегда использовать тот же сокет или его можно закрывать и потом открывать новый — и автоматически заюзается тот же коннекшн?
Как понимать термин "переиспользовать коннекшн" с точки зрения клиента?
Да, я, если честно, запутался. Я сети вплотную изучал много лет назад и сейчас таких нюансов не помню уже, потому что ни разу до этого не сталкивался.
С точки зрения логики TCP keep-alive требует использовать один и тот же открытый однажды сокет, пока соединение живо.
А с точки зрения http keep-alive что от клиента требуется?