c++ win32 http server
От: TailWind  
Дата: 03.03.23 19:31
Оценка:
Подскажите новичку, как организовать структуру программы

Нужно чтобы был Keep Alive. То есть чтобы tcp соединение не разрывалось после получения одной страницы, а ждало следующую

На каждое соединение создавать поток?

Есть какое-то ограничение на количество сокетов и потоков?
Re: c++ win32 http server
От: kov_serg Россия  
Дата: 03.03.23 19:50
Оценка:
Здравствуйте, TailWind, Вы писали:

TW>Подскажите новичку, как организовать структуру программы

Возмите готовую библиотеку. https://github.com/yhirose/cpp-httplib

TW>Нужно чтобы был Keep Alive. То есть чтобы tcp соединение не разрывалось после получения одной страницы, а ждало следующую

Какие проблемы?

TW>На каждое соединение создавать поток?

Нет не нужно. Смотрите в сторону https://think-async.com/Asio/ https://libuv.org/

TW>Есть какое-то ограничение на количество сокетов и потоков?

Ограничения всегда есть
Re[2]: c++ win32 http server
От: TailWind  
Дата: 03.03.23 19:57
Оценка:
Ой, нет не надо библиотеки советовать

Мне интересно самому разобраться
В том числе, чтобы получить представление об ограничениях
Re[2]: c++ win32 http server
От: TailWind  
Дата: 03.03.23 20:35
Оценка:
TW>>Нужно чтобы был Keep Alive. То есть чтобы tcp соединение не разрывалось после получения одной страницы, а ждало следующую
_>Какие проблемы?

У меня пока два варианта:

1. Когда приходит соединение. Создаётся сокет.
К нему создаётся поток. В нём цикле получаем и отправляем данные

2. Когда приходит соединение. Создаётся сокет.
Кладём его в таблицу
Эту таблицу одним потоком постоянно обходим и смотрим не прислали ли чего нового
Re[3]: c++ win32 http server
От: kov_serg Россия  
Дата: 03.03.23 21:02
Оценка: +1
Здравствуйте, TailWind, Вы писали:

TW>Ой, нет не надо библиотеки советовать


TW>Мне интересно самому разобраться


https://beej.us/guide/bgnet/
https://www.geeksforgeeks.org/socket-programming-cc/
https://www.wireshark.org/

https://www.youtube.com/watch?v=2hNdkYInj4g
https://think-async.com/Asio/
https://www.boost.org/doc/libs/1_44_0/doc/html/boost_asio/examples.html
https://www.bogotobogo.com/cplusplus/sockets_server_client.php

TW>В том числе, чтобы получить представление об ограничениях

Для этого надо нормальные сетевухи хотя бы по 100Гбит несколько штук что бы огрести ограничения в полный рост
Отредактировано 03.03.2023 21:21 kov_serg . Предыдущая версия .
Re: c++ win32 http server
От: reversecode google
Дата: 03.03.23 21:31
Оценка:
в чем проблема взять готовый на гитхабе и изучить все досконально ?

обучать и разжевывать вам сильно дорого, для тех кто действительно знает
Re[2]: c++ win32 http server
От: Pzz Россия https://github.com/alexpevzner
Дата: 03.03.23 21:50
Оценка:
Здравствуйте, reversecode, Вы писали:

R>обучать и разжевывать вам сильно дорого, для тех кто действительно знает


И мне кажется, все, кто знает, взяли и сами разобрались, а не задавали наивных вопросов в форуме.

А топикстартеру я бы пожелал не связываться. HTTP кажется простым протоколом, но в нем есть много тонких нюансов (я в разное время написал для разных надобностей пару серверов и штуки три клиента, так что имею соответствующий опыт).
Re[3]: c++ win32 http server
От: reversecode google
Дата: 04.03.23 00:32
Оценка:
хттп такой же просто протокол как и другие
главное сделать правильный подход

все так же как и с селёдкой
если не правильно ее схватить и потянуть
то можно получить кучу костей в перемешку с мясом и сильно испачкаться жиром
Re: c++ win32 http server
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 04.03.23 20:00
Оценка:
Здравствуйте, TailWind, Вы писали:

TW>Подскажите новичку, как организовать структуру программы


Воспользоваться http.sys https://learn.microsoft.com/en-us/windows/win32/http/http-api-start-page
Re[2]: c++ win32 http server
От: TailWind  
Дата: 05.03.23 11:30
Оценка: :)
G>Воспользоваться http.sys https://learn.microsoft.com/en-us/windows/win32/http/http-api-start-page

Спасибо

Я уже всё написал на C++ и сокетах
Всё отлично работает и нагрузку держит
Я просто боялся создавать отдельный поток на каждый сокет

Протестировал. Винда может создать до 1900 потоков
Время создания нулевое
Меня более чем устраивает
Re[3]: c++ win32 http server
От: Слава  
Дата: 05.03.23 11:35
Оценка:
Здравствуйте, TailWind, Вы писали:

TW>Протестировал. Винда может создать до 1900 потоков

TW>Время создания нулевое
TW>Меня более чем устраивает

Перепишите на fiber'ы ради разнообразия
Re[3]: c++ win32 http server
От: rudzuk  
Дата: 05.03.23 11:43
Оценка: +2
Здравствуйте, TailWind, Вы писали:

TW> Я уже всё написал на C++ и сокетах

TW> Всё отлично работает и нагрузку держит
TW> Я просто боялся создавать отдельный поток на каждый сокет

TW> Протестировал. Винда может создать до 1900 потоков


Уменьши дефолтный размер стека — станет еще больше. Сбилди в x64 станет ваще очень много
avalon/3.0.2
Re[3]: c++ win32 http server
От: Mr.Delphist  
Дата: 09.03.23 14:19
Оценка: +1
Здравствуйте, TailWind, Вы писали:

TW>Я уже всё написал на C++ и сокетах

TW>Всё отлично работает и нагрузку держит
TW>Я просто боялся создавать отдельный поток на каждый сокет

Рекомендую почитать — nginx architecture https://www.aosabook.org/en/nginx.html

TW>Протестировал. Винда может создать до 1900 потоков

TW>Время создания нулевое

Время создания нулевое, но при большом числе потоков начинаются иные расходы и штрафы.
Re[4]: c++ win32 http server
От: LuciferSaratov Россия  
Дата: 09.03.23 14:33
Оценка: :)
Здравствуйте, reversecode, Вы писали:

R>все так же как и с селёдкой


очень интересное сравнение.
с этим вопросом я вышел в сеть интернет обратился к ChatGPT.

> В чём сходства протокола HTTP и селёдки?

Протокол HTTP и селёдка — два абсолютно разных объекта, поэтому найти между ними явные сходства может быть довольно сложно.

Однако, если говорить в шутливом ключе, то можно привести следующие параллели:

Оба слова начинаются на букву "H".
HTTP и селёдка используются людьми в повседневной жизни.
Как и HTTP, селёдка может передаваться через сеть — в виде заказа в интернет-магазине или доставки еды на дом.
Но, конечно же, это все аналогии не имеющие прямого отношения к функциональности и свойствам HTTP и селедки.


казалось бы, ничего интересного, но см. выделенное.
торчат англоязычные уши.
Re[5]: c++ win32 http server
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.03.23 17:05
Оценка:
Здравствуйте, LuciferSaratov, Вы писали:

LS>

>> В чём сходства протокола HTTP и селёдки?
. . .
LS>Оба слова начинаются на букву "H".


LS>казалось бы, ничего интересного, но см. выделенное.


Можно в русском переводе вместо "селедка" написать "хамса".

LS>торчат англоязычные уши.


Да, англичанка гадит, аж сил никаких нет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.