|
10 / 8 / 2
Регистрация: 02.12.2018
Сообщений: 142
|
|||||||||||
Ожидание ответа от клиента после вызова функции получения какой либо информации20.12.2021, 12:11. Показов 5303. Ответов 2
Всем привет. Пишу приложения клиент/сервер и стало интересно реализовать одну вещь.
Допустим клиент подключен к серверу и сервер запрашивает у клиента какие ни-будь данные. Делает сервер это с помощью функции:
Пока что я делаю такие вещи через функции обратного вызова, т.е:
На данный момент функция GetClientData просто добавляет клиента в очередь, а проверяется очередь при каждом пришедшем на сервер пакете от любого клиента. Я бы хотел уберечь себя и других от раздувания кода в виде функций обратного вызова, по этому подумал об этой идее. Да и просто даже интересно, какие варианты реализации существуют. Сейчас как я думаю, можно сделать цикл в котором будет идти Sleep и при таймауте или ответе он будет завершаться, но опять же я не уверен что это хорошая реализация. Кто то реализовывал подобное?
0
|
|||||||||||
| 20.12.2021, 12:11 | |
|
Ответы с готовыми решениями:
2
Ожидание ответа от клиента
Как вернуться к началу компиляции после выполнения какой либо функции? |
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
|
| 22.12.2021, 11:15 | |
|
Skymotion,
1) Сервер не должен приостанавливаться при ожидании ответа от клиента. Это неправильно. Сервер должен заниматься обработкой запросов от других клиентов в это время. 2) Для правильной реализации нужны неблокирующие сокеты. Тогда: а) Сервер отправляет запрос клиенту и продолжает работу. Объект, обозначающий клиента на стороне сервера, переводится в режим "подготовка данных". Если у вас нет такого объекта, то самое время его сделать. Будет проще. Естественно, если клиентов несколько, то и объектов несколько. Они в списке; б) Мультиплексор неблокирующих сокетов засыпает в ожидании событий от клиентов (новые подключения, отключения старых ответы от других клиентов, и в том числе ответ на ваш запрос из пункта а); в) таймер может быть добавлен в этот же мультиплексор (это проще или сложнее сделать в зависимости от ОС, для которой вы пишете; в специализированных библиотеках на основе сокетов как правило уже есть свои таймеры, которые так работают); г) если ответа от клиента нет, а таймер истек, то с объекта клиента снимается режим "подготовка данных"; д) если данные от клиента пришли, то объект клиента переводится в режим "данные готовы". Упомянутые режимы, объекты клиентов - это программные абстракции, которые вы вводите сами. Мультиплексирование ввода-вывода, неблокирующие сокеты - это понятия, в которых, если вы о них слышите в первый раз, вам необходимо разобраться. Использование sleep на сервере - это плохой тон (и необоснованное снижение времени отклика сервера).
1
|
|
|
10 / 8 / 2
Регистрация: 02.12.2018
Сообщений: 142
|
|
| 26.12.2021, 23:20 [ТС] | |
|
DrOffset, здравствуйте. То есть мне лучше все же использовать функции обратного вызова по мере поступления от клиента какой либо информации и забыть о остановке потока в ожидании.
Мой сервер и клиент на UDP.
0
|
|
| 26.12.2021, 23:20 | |
|
Помогаю со студенческими работами здесь
3
Вывод скрытого блоки либо информации после авторизации либо регистрации пользователя на сайте Заставка(ожидание) на время выполнения какой-либо операции
Почему сокет закрывается, сразу после получения ответа? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|