|
0 / 0 / 1
Регистрация: 15.03.2016
Сообщений: 23
|
||||||
Linux, HTTP сервер24.05.2016, 14:50. Показов 1685. Ответов 4
Метки нет (Все метки)
Пишу HTTP-сервер на данный момент, задача по учебе, поэтому boost и прочие дополнительные библиотеки использовать не могу. Хочется, чтобы сервер умел обрабатывать параллельно множество клиентов, моментально завершать работу сервера по требованию и не допускать лишней нагрузки процессора странными циклами. Вопрос в том, как правильно работать с сокетами.
На данный момент у меня есть такой код для принятия подключений, который я запускаю в отдельном потоке:
Это значит, что я получаю максимальное время ожидания в 1 секунду при попытке остановить работу сервера? Или я могу закрыть сокет из другого потока, и блокирующая операция моментально завершится? Помогут ли мне в моей задаче неблокирующие сокеты? Я не очень хорошо понимаю, какова в данном случае выгода от того, что они сразу возвращают мне управление. Как потом работать с клиентами: отдельный поток на каждого клиента с таким же принципом обработки (селект с таймаутом в цикле при ожидании данных), или что-то другое? Селект может принимать для обработки несколько сокетов сразу, но я не вижу реального использования.
0
|
||||||
| 24.05.2016, 14:50 | |
|
Ответы с готовыми решениями:
4
Http сервер HTTP сервер на SOCK_RAW Http Сервер Winsock |
|
Модератор
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
|
|
| 24.05.2016, 15:19 | |
Сообщение было отмечено dobroivan как решение
Решение
dobroivan, select не бывает неблокирующим во всяком случае если вы не вкладываете в это слово задание нулевого таймаута. для досрочного возврата из select попробуйте там где вы инициируете процедуру останова закрыть сервер-сокет. если вы используете select вам нет особой необходимости использовать неблокирующие сокеты. если клиенты через сервер получают доступ к одному и тому же ресурсу и сервер физически не может распараллелить обработку, то нет никакой необходимости создавать потоки. реальное использование передачи нескольких сокетов в select состоит например в том что у вас есть 10 подключенных сокетов и вы хотите знать есть ли на одном или нескольких из них входящие данные - вызываете select а потом пробегаете по множеству вычитывая данные из отмеченных сокетов. однако помните что множество имеет ограничение на размер (64).
1
|
|
|
0 / 0 / 1
Регистрация: 15.03.2016
Сообщений: 23
|
|
| 24.05.2016, 15:31 [ТС] | |
|
vxg, сервер имеет несколько независимых друг от друга ресурсов, к которым могут получать доступ клиенты, поэтому распараллеливание в данной задаче имеет смысл.
select на нескольких сокетах сразу и последующая независимая (= в разных потоках) обработка каждого из отмеченного сокета эффективнее чем изначально независимые селекты на каждом из сокетов?
0
|
|
|
Модератор
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
|
||
| 24.05.2016, 15:36 | ||
|
Добавлено через 1 минуту ...но если ваше приложение изначально построено на выделении потока для каждого сокета то при такой схеме оно будет иметь сложную архитектуру - пинать из потока сокеты в селект который лежит где-то еще и потом оттуда забирать - брр
1
|
||
|
0 / 0 / 1
Регистрация: 15.03.2016
Сообщений: 23
|
|
| 24.05.2016, 15:51 [ТС] | |
|
vxg, да, тоже подумал о том, что архитектура станет страшной. Код в бой вряд ли когда-то пойдет, так что для учебной задачи не буду заморачиваться с производительностью и остановлюсь на отдельном селекте на каждом сокете.
0
|
|
| 24.05.2016, 15:51 | |
|
Помогаю со студенческими работами здесь
5
Как передавать изображение по http на сервер? Параллельный TCP сервер linux
Пробую написать простой сервер на Linux. Не запускается Как переписать клиент-сервер Windows под linux? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|