|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
||||||
Ожидание ответа сервера01.04.2019, 22:18. Показов 12681. Ответов 30
Метки нет (Все метки)
Возникла необходимость на html-странице автоматически отправлять запрос серверу через определённые интервалы времени.
Сделал скрипт:
Можно ли в скрипте как-то указать, чтобы клиент сначала дождался неполученного ответа, а затем выполнял document.location.search = 'auto' ?
0
|
||||||
| 01.04.2019, 22:18 | |
|
Ответы с готовыми решениями:
30
Ожидание сообщений от сервера Парсинг ответа сервера ajax |
|
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
|
|
| 02.04.2019, 07:33 | |
|
LVV, а сам запрос к серверу как отправляется?
0
|
|
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
||
| 02.04.2019, 11:30 [ТС] | ||
|
От клиента сервер получает следующий запрос: GET /auto HTTP/1.1 Host: ................................... Connection: keep-alive User-Agent:........................... Accept:................................. Referer:................................ ........................................ ............. и отправляет такой ответ: HTTP/1.1 204 No Content (ответ без контента, чтобы в браузере не менялась страничка) Автозапросы мне нужны для определения сервером активности клиента (в сети он, или нет). Всё работает. Но, с клиентской странички пользователем могут быть отправлены и другие GET-запросы (нажатием кнопки, ссылки и т.п.). И, если во время обработки такого клиентского запроса (до получения ответа сервера) происходит передача скриптом автозапроса, то предыдущий ответ сервера "теряется". Вот я и спрашиваю, можно ли как-то проконтролировать, получил ли клиент ответ на свой предыдущий запрос, или нет? И, в зависимости от этого отправлять автозапрос, или ждать.
0
|
||
|
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
|
|||||||
| 02.04.2019, 14:04 | |||||||
Сообщение было отмечено LVV как решение
Решение
1
|
|||||||
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
||||||
| 03.04.2019, 12:25 [ТС] | ||||||
|
Спасибо, atanov.
В моём случае это, наверное, будет выглядеть примерно так:
Ведь у меня клиентский запрос обрабатывается на сервере средствами С++.
0
|
||||||
|
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
|
|||
| 03.04.2019, 12:40 | |||
|
LVV, а куда выведет
0
|
|||
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
||||||||||||
| 03.04.2019, 18:55 [ТС] | ||||||||||||
|
На примитивном уровне это выглядит примерно так:
И так многократно. Я просто смотрю, что там содержится в запросе, и соответственно реагирую. Например, document.location.search = 'auto'; генерирует в запросе клиента строку GET /auto HTTP/1.1 и тогда клиенту отправится сообщение HTTP/1.1 204 No Content, а в базе данных на стороне сервера отмечется, что такой-то клиент в такое-то время был в сети. А если в запросе присутствует GET / HTTP/1.1 то ответ сервера будет с заголовком HTTP/1.1 200 OK и html-контентом главной страницы. И т.п. Наверное, не так уж и важно, чтот там написано вместо 'название скрипта-обработчика'. Мне главное, чтобы сервер регулярно получал от клиента автозапрос. И чтобы этот автозапрос не мешал пользовательским запросам. Но с таким скриптом в теле html-страницы:
Хотя по идее должны отправляться каждые пять секунд.
0
|
||||||||||||
|
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
|
||
| 03.04.2019, 19:12 | ||
|
LVV, нет, не верно.
Вообще прелесть сокета в неразрываемом соединении. Ну да ладно. А вот Дальше - функция statusReady() когда статус запроса 4, т.е. обработан сервером и получен ответ. Т.е. в Вашем случае, без обработчика, условие в стр. 6 всегда будет false. Вот здесь почитайте, что ждёт XMLHttpRequest() https://learn.javascript.ru/ajax-xmlhttprequest. Кстати, Вы попробуйте в качестве обработчика запускать Ваш кусок кода (в отдельном модуле, конечно), только сообщайте ответ сервера. Тогда и функция сработает как положено. Только уберите 13-ю строку.
1
|
||
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
|||||
| 03.04.2019, 20:21 [ТС] | |||||
|
closesocket(client_socket); и устанавливается соединение с другим: client_socket = accept(........) ну да ладно ![]() В нём нет отдельных модулей. Весь сервер - это (после компиляции проекта) один exe-файл плюс база данных. Мне нужно, чтобы html-страничка регулярно отправляла автозапрос на сервер. Иначе как я буду знать, находится клиент в сети или нет?
0
|
|||||
|
640 / 481 / 172
Регистрация: 26.05.2016
Сообщений: 2,674
|
|||||||||||||||||
| 04.04.2019, 07:37 | |||||||||||||||||
|
Попробуйте так:
119.php это название обработчика - замените на свой. Поместите в браузер html и откройте консоль браузера, чтобы видеть возможные ошибки. Раз в 5 секунд в див должен добавляться очередной ответ сервера. И ещё - интервал первый раз 5 сек отсчитает от момента загрузки содержимого html. А потом будет отсчитывать от момента ответа сервера.
1
|
|||||||||||||||||
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
|
| 04.04.2019, 10:13 [ТС] | |
|
Спасибо, atanov, за участие... Разбираюсь.
0
|
|
|
13440 / 7534 / 829
Регистрация: 09.09.2009
Сообщений: 29,554
|
|
| 04.04.2019, 10:39 | |
|
1
|
|
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
||||||||
| 06.04.2019, 14:29 [ТС] | ||||||||
|
Если бы это помогло решить проблему, то можно было бы создать какой-то скрипт-пустышку для заполнения параметра URL в XMLHttpRequest. Попробовал... не помогло. На этот? sendInfo.open('GET', '119.php', true); sendInfo.send(); atanov, если я правильно разобрался в идее Вашего кода, то он должен регулярно генерировать запросы, но каждый следующий запрос генерируется только в том случае, если получен ответ на предыдущий сгенерированный скриптом запрос. Но это не совсем то, чего хотел я. Еще раз сформулирую проблему: Например, имеется такая html-страничка:
который он обрабатывает, например, две секунды, чтобы послать ответ: HTTP/1.1 200 OK................. Но в течении этих двух секунд та же страничка успеет отправить следующий автозапрос: GET /auto HTTP/1.1 на который сервер ответит: HTTP/1.1 204 No Content. И это произойдёт раньше, чем обработается запрос по ссылке. Таким образом, до клиента не дойдёт ответ 200 OK а только лишь 204 No Content. Вот я и хочу сделать так, чтобы браузер дожидался ответа на любой запрос (а не только сгенерированный автоматически), и лишь после этого отправлял свой автозапрос. То есть, чтобы автозапросы не мешали пользователю работать с web-страничкой.
0
|
||||||||
|
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
|
||
| 06.04.2019, 15:05 | ||
|
1
|
||
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
||
| 06.04.2019, 16:24 [ТС] | ||
|
С одной стороны - сервер, с другой - браузер. И как Вы представляете в таком случае, обработку сервером запросов, например, от 1000-ти клиентов? 1000 - одновременных соединений? Связь с клиентом прекращается сразу после отправки сервером ему ответа. После этого устанавливается связь с другим клиентом, приславшим запрос и т.д. Если пользователь закроет страничку, или оборвётся связь, то сервер об этом не узнает, так как никакого запроса не получит. Добавлено через 2 минуты Клиент может быть в сети, но не проявлять активности. Пользователь может длительное время не нажимать никаких кнопок и ссылок... но оставаться в сети. Вот для этого и нужны автозапросы, чтобы узнать открыта ли страничка на стороне клиента или нет (в сети клиент или нет).
0
|
||
|
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
|
|||
| 06.04.2019, 17:36 | |||
|
1
|
|||
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
||
| 06.04.2019, 17:44 [ТС] | ||
|
Или дайте ссылку, где почитать об этом...
0
|
||
|
13440 / 7534 / 829
Регистрация: 09.09.2009
Сообщений: 29,554
|
|
| 06.04.2019, 17:55 | |
|
не могу сказать, что сильно вникал в вашу задачу, но у XMLHttpRequest есть параметр "async", и почему то мне кажется что вам нужно использовать его,чтобы яваскрипт дожидался ответа на предыдущийответ и (например) снимал бы какой-нибуть флаг. а перед запуском нового запроса проверял его состояние.
1
|
|
|
566 / 465 / 183
Регистрация: 14.10.2017
Сообщений: 1,259
|
|||||||
| 06.04.2019, 18:16 | |||||||
|
Но точно знаю что сокеты поддерживают все нормальные сервера на всех языках А вы сами читали материал по приведенной ссылке? Там есть несколько пунктов про сокеты, может это оно и есть? Добавлено через 9 минут LVV, ну бегло так заглянул в раздел Получение запроса и отправка ответа :После установки соединение с сервером, браузер отправляет HTTP-запрос. Мы получаем содержимое запроса через функцию recv. Она принимает дескриптор TCP-соединения (в нашем случае это client_socket), указатель на буфер для сохранения полученных данных, размер буфера в байтах и дополнительные флаги (которые сейчас нас не интересуют).При успешном выполнении функция recv вернет размер полученных данных. В случае ошибки возвращается значение SOCKET_ERROR. Если соединение было закрыто клиентом, то возвращается 0. Мы создадим буфер размером 1024 байта для сохранения HTTP-запроса. И далее пример кода Кликните здесь для просмотра всего текста
0
|
|||||||
|
155 / 137 / 46
Регистрация: 15.02.2010
Сообщений: 750
|
||
| 06.04.2019, 19:02 [ТС] | ||
|
closesocket(client_socket); Соединение с клиентом закрыто, и ожидается очередной запрос (не обязательно от этого же клиента). А соединения с первым клиентом нет, значит и о закрытии им странички сервер не узнает! Добавлено через 3 минуты Проблема не в создании сервера и его работе. У меня всё создано и всё работает. Мне нужно определить кто из клиентов находится в сети. Логины клиентов сервер прописал в куках. Поэтому, получая регулярные автозапросы с куками я могу знать кто именно еще не закрыл страничку. Проблема в том, что автозапросы при совпадении во времени мешают обычным пользовательским запросам клиента.
0
|
||
| 06.04.2019, 19:02 | |
|
Помогаю со студенческими работами здесь
20
Не понятный формат данных ответа сервера Как получить код ответа сервера? Почему XmlHttpRequest не выводит alert с кодом ответа сервера?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
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
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|