Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: http сервер и клиент C++14/17  (Прочитано 7946 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 02-11-2020 11:56 » 

всем привет!

Поставили мне такую задачу - завести на C++ http сервер (клиент тоже нужен будет).
Порылся я в тырнете, нашёл удобный класс httplib, он написан буквально в одном заголовочнике.

ссылки пока не прилепляю, а если понадобится сам исходник - могу прицепить. В общем-то найти несложно
(click to show)
//
//  httplib.h
//
//  Copyright (c) 2020 Yuji Hirose. All rights reserved.
//  MIT License
//

Как запустить сервер - разобрался, примеры хорошие. Запрос-ответ, всё работает

Но тут мне начальство говорит - нужно устанавливать постоянное соединение. Вроде как, чтобы сервер всегда мог клиенту по этому соединению что-то ещё закинуть. Я почитал про http там написано, что
Цитата
В отличие от многих других протоколов, HTTP не сохраняет своего состояния. Это означает отсутствие сохранения промежуточного состояния между парами «запрос-ответ».

в самом исходнике я тоже не понял, как это осуществить - по дизайну в нём осуществляется вызов лямбды, получающей запрос и формирующей ответ. Нет никаких торчащих наружу постоянных соединений

Вопрос: так возможно ли для http устанавливать постоянное соединение? Или это в данном исходнике просто не заложено?
Или подскажите какую-нибудь библиотечку на C++ (только современных стандартов, а не ересь на Си  Отлично ) . Желательно без dll и lib , а именно в виде исходников

Добавлено через 1 минуту и 45 секунд:
технически, конечно, если это всё написать вручную, я представляю, как сделать постоянное соединение. Но вручную велосипедить стандартный http не хочется Улыбаюсь Да и не быстро это будет, наверное, сделать
« Последнее редактирование: 02-11-2020 11:58 от Алексей++ » Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 02-11-2020 17:40 » 

немного оффтопика.
Вопрос: Чем не угодили уже сушествуюшие решения?
Держать подолгу соедмнение на стороне сервера, источник внезапных и не понятных падений онного. А если у тебя предвидется всего 1 клиент, тогда зачем клиент-серверное решение?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 03-11-2020 03:44 » 

Вопрос: Чем не угодили уже сушествуюшие решения?
что за решения? Где взять ? Улыбаюсь

это всё не моя прихоть. Моя бы воля - я бы этот гремучий толстенный http вообще бы не тащил в проект, у меня и без него всё прекрасно Отлично . Начальству его зачем-то хочется. Но сейчас получается так - в приложении имеется http-клиент и http-сервер для запросов туды и сюды. Это два соединения. Это им тоже вроде не нравится (а без http у меня было бы одно соединение).
Вот и возник вопрос: если http клиент подключился к http-серверу, возможно ли по этому же подключению и обратные запросы (не ответы!) закидывать.
Текущие готовые классы для работы с http рвут соединение после пары запрос-ответ
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 03-11-2020 16:31 » 

Самый стандартный Apache. У MS есть свой. Правда я не знаю условия его распространения и использования. Бывший Российский NGNix. Правда он больше про распределение нагрузок.

Сервер не должен держать соединение. Это не безопасно. Как пример. У тебя падает клиентская программа, или падает элекричество. Ломается твой раутер и т.д. На сервер не приходит уведомление о закрытии сокета. Конечно он закроет соединение по тайм ауту через 15 минут. Но за это время могут прибежать еше куча таких же не закрытых сокетов. Стек портов ограничен 65 тысячами. При этом обратных всего 32 тысячи. Получается непонятный подвес сервера. Который будет влиять на работу всей системы. Плюс ко всему, как праило отдельное соединение обрабатывается в своей отдельной нитке (thread). Что тоже влияет на всю систему в целом.
Суть клиент серверных решений это клиент послал запрос, сервер его принял, обработал, отаслал ответ клиенту. И забыл про него. Это уже забота клиента, поддерживать актуальность информации. Например раз в пол минуты посылать повторные запросы.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 03-11-2020 18:35 » 

Finch, не, ты меня немного не понял )) Мне не нужно свой сайт делать, нужно между двумя приложениями всего лишь данные гонять. Моё приложение на C++, а что там у них -  не знаю, да и мне это не интересно.
Мне нужно именно готовый C++ классик скромных размеров и со скромной стандартной функциональностью навроде вышеописанного. Там всё работает, но вот это странное требование про "постоянное соединение" - это и не понятно. Если это вообще не предусмотрено, то придётся делать ручную имитацию http на "обычных" советских сокетах
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 03-11-2020 19:28 » 

Веб морда это одно из применений http сервера. А так он может генерировать все что угодно. И у него есть также возможность прицепить C++ CGI модули, которые будут обрабатывать от клиентов запросы.
А собственно, а зачем тебе вообше подержка протокола http?  Ты можеш в принципе изобрести свой собственный протокол. Раз у тебя и клиент и сервер будут самописные?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 03-11-2020 19:39 » 

а зачем тебе вообше подержка протокола http
мне - вообще не нужно, я до сих пор не понимаю, зачем начальству это ***. Видимо - это модно. Ну, хочет - и ладно, дЕлаю )
Записан

darkelf
Молодой специалист

ua
Offline Offline

« Ответ #7 : 04-11-2020 08:25 » 

По поводу поддержки соединения в википедии пишут, что эта функциональность есть в HTTP/1.1. В той библиотеке, на которую Вы ссылаетесь есть такая вещь как set_keep_alive(bool). Насколько я понял по документации - оно должно быть и в сервере и в клиенте, причём для HTTP/1.0 вроде как должен быть явный заказ, а для HTTP/1.1 - по умолчанию.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 04-11-2020 12:08 » 

darkelf, спасибо, попробую в эту сторону порыть
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines