|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
|||||||||||||||||||||
Если нет свободных сокетов на http сервере13.09.2017, 17:55. Показов 954. Ответов 5
Метки нет (Все метки)
Здравствуйте, чтобы примерно представлять в чём дело: есть небольшой микроконтроллер с wifi. Хочу сделать на нём http сервер посредством сокетов (пока вроде получается) для одного клиента. В этом контроллере есть ограничение на количество открытых сокетов (8 штук). Допустим, что я для http-сервера хочу использовать только 2 сокета. Тот же хром запрашивает аж до 6 соединений. Как правильно ответить клиенту, что у меня нет свободных сокетов. То есть заставить его (не забываем, клиент, если он есть, только один) использовать другие сокеты(в моём случае они keep-alive) для запроса нужных ему ресурсов?
Это псевдокод http-сервера (нужной мне части)
1.)
2.)
3.) Вместо того, чтобы делать Accept я сначала проверял, есть ли у меня свободные сокеты. Если есть, вызывал Accept . Если нет, не вызывал, а просто обрабатывал уже созданные клиентские сокеты.
0
|
|||||||||||||||||||||
| 13.09.2017, 17:55 | |
|
Ответы с готовыми решениями:
5
Триггер на проверку свободных мест в палате: если их нет, то запретить добавление Как реализовать систему сокетов на сервере? Чтобы можно было с любого компьютера подключиться к этому сокету? Если в папке имеется файл с расширением .ini то кнопка активируется если нет то нет |
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
|
| 13.09.2017, 18:22 | |
|
IcyWind, может что-то где-то не инициализировано?
0
|
|
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
|
| 14.09.2017, 11:04 [ТС] | |
|
Сомнительная идея. Ведь, будь оно так, то первый запрос всегда бы крутился в ожидании.
Единственное, что изменилось - это отсутствие вызова Accept (если все сокеты заняты). При этом до этого момента Accept вызвывался как минимум столько раз, сколько свободных сокетов было... Как по мне, больше похоже на то, что для браузера запрос на открытие ещё одного сокета является частью запроса странички. Я не вызвал Accept - браузер не получил ответ -> крутится в ожидании А насколько правильно будет попробовать послать сообщение в слушающий сокет? (_listenSocketId в моём случае) Или вообще закрыть его на время?
0
|
|
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
|
| 14.09.2017, 15:44 | |
|
IcyWind, я бы вам рекомендовал не поддерживать кип алайв, освобождать сокет после передачи ответа и не асептить входящее соединение если нет свободных сокетов - нечего баловать браузер - он будет вынужден работать с вашим убердевайсом последовательно. Ждать что жадный хром захватив соединение для каких-то одному ему ведомых целей и скачавший через него страницу начнёт тянуть через это же соединение что-то ещё наивно.
1
|
|
|
9 / 9 / 9
Регистрация: 19.09.2011
Сообщений: 272
|
||
| 14.09.2017, 22:20 [ТС] | ||
|
Если страничка простая, то хром не зажирается - открывает одно соединение, тащит через него страницу и всё) сидит тихо и смирно. Если же страница попалась сложная (с кучей css / файлов-скриптов, картинок и т.д.), то активно используется как уже установленное соединение (через которое страница была первоначально загружена), так и вновь открытые (как правило 4-5 из 6-ти). Далее же, если я снова запрошу простую страницу, хром сам закрывает некоторые соединения. Как правило, открытым держит 2-3 соединения. Так что хром не жадный) хром умный)) Я пробовал закрывать соединения...в моём случае накладные расходы на пересоздание клинтских сокетов хорошо видны невооружённым глазом. Keep-Alive значительно ускоряет обработку запроса, как, впрочем, и бОльшее число активных соединений. А вот не ассептить входящее соединение - на данный момент самый лучший вариант (не считая бага при загрузки первой страницы). Большое спасибо, что откликнулись на столь нестандартную тему)
0
|
||
|
Модератор
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
|
|
| 15.09.2017, 06:30 | |
|
IcyWind, баг это именно баг и такого быть не должно
0
|
|
| 15.09.2017, 06:30 | |
|
Помогаю со студенческими работами здесь
6
Как запустить скрипт(на сервере нет интерн) через другой сервер,кот выходит в нет Чтобы вы делали, если бы у вас было 30 т. рублей свободных каждый месяц?
Поддержка PHP на HTTP сервере Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|