Может кто-то объяснить на пальцах, как реализуется такая фича, как уведомление со стороны сервера о том, что инфа на html-страничке изменилась и клиент должен обновить страничку?
Допустим, я сделал программку, которая по мониторит определенный порт и выдает по запросу в этот порт генерируемую HTML-страничку. браузер эту страничку показал, а на страничке, допустим, напряжение АЦП показано.
моя программка измерила в очередной раз напряжение - как она может уведомить клиента о необходимости обновить страничку? Или просто надо рефрешить страничку почаще? как это по уму делается в нынешних условиях?
мне только объяснять надо попроще... и, если есть решение, то тоже минимальной сложности, потому как самое тупое - каждую секунду обновлять страничку, - я и так знаю, как сделать, и альтернатива мне желательна примерно такого уровня сложности... если она есть, конечно.
просто хочу с минимальными заморочками обеспечить возможность на смартфоне видеть то, что я там наизмерял. писать приложение для смартфона - это перебор...
Добавлено after 2 minutes 20 seconds: да, минус моего тупого решения очевиден - страничка будет "мерцать" наверняка при перезагрузке. вот потому и ищу альтернативу... чтобы обновлять, возможно, не все, а что-то... ну, в этих технологиях я вообще профан... может, вообще чушь несу...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: HTTP: взаимодействие клиента и сервера
Добавлено: Пт май 22, 2020 09:51:53
Друг Кота
Карма: 94
Рейтинг сообщений: 3479
Зарегистрирован: Пн фев 09, 2009 22:19:49 Сообщений: 17570 Откуда: Когда-то был прекрасный город для людей
Рейтинг сообщения:0
Вы неправильно понимаете идеологию клиент-серверных взаимодействий. Серверу лишь положено обслуживать запросы. Поэтому в броузеров есть функция задания периодичности проведения обновления информации с сервера. Там, где присутствует, проверка по дате странички.
Какой будет протокол, это роли не имеет.
Если в рамках идеологии клиент-серверных нужно проводить обновление с удаленной стороны, то меняйте местами клиента с сервером.
Либо устраивайте на удаленной стороне активного агента, как например, в медийных потоковых рассылках.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Либо устраивайте на удаленной стороне активного агента, как например, в медийных потоковых рассылках
вот примерно об этом я и спрашиваю - как это делается? активный агент, как я понимаю, это java-скрипт или что-то типа того, указание на загрузку которого я в коде своей страничке и отправляю? браузер его грузит, запускает, а скрипт потом сам шлет в мою программку запросы и отрисовывает полученные результаты?
моя предполагаемая программа будет работать на компьютере. не хотелось бы всякие апачи и т.п. ставить, хотелось бы обойтись только мониторнгом порта и выдачей в него чего-то там... возможно ли это?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Заголовок сообщения: Re: HTTP: взаимодействие клиента и сервера
Добавлено: Пт май 22, 2020 12:32:54
Друг Кота
Карма: 94
Рейтинг сообщений: 3479
Зарегистрирован: Пн фев 09, 2009 22:19:49 Сообщений: 17570 Откуда: Когда-то был прекрасный город для людей
Рейтинг сообщения:0
Возможно. DDOS в пределе это называется. Вот и бери за шаблон его скрипты для броузера. Если просто закольцованный цикл с запросом трудности написать составляют.
Простой вариант - использовать мета-тег refresh на страничке, будет автообновляться и мерцать, вариант посложнее можно поискать по "ajax примеры" - это именно скрипт, тянущий данные со специальной страницы, содержащей только данные, потом скрипт подменяет значения в обьектах страницы без ее перезагрузки.
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
это мне известно, и в самом первом своем сообщении я об этом писал.
Morroc писал(а):
это именно скрипт
меня вот этот вариант больше интересует, но без "тянущихся с других сайтов" скриптов. т.е. мне бы надо скрипты, внедренные сразу в HTML-код возвращаемой странички.
тут бы просто понять, как следует поступать... таймер какой-то, что ли, нужен? или какой-то способ открыть "канал" и ждать, когда по этому каналу придут данные, на которые потом реагировать? вот в этом затык. я понятия не имею, какие средства в джаваскрипте есть для подобного... и есть ли вообще...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Понятно. Так тоже делают, можно по "comet ajax" почитать если оставаться в рамках http или "javascript websocket". Незакрываемое соединение я как то пробовал, websocket нет. Мне кажется с минимальными заморочками будет классический ajax без push со стороны сервера если обновление по таймеру устраивает, но ради интереса можно попробовать и "канал", с ним разве что какие то события можно "мгновенно" клиенту отправить, мне кажется это для игрушек и чатов только критично.
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
я планирую таким образом сделать интерфейс управления оборудованием, поэтому, если есть возможность пихать клиенту данные по инициативе сервера - это бы меня устроило как нельзя лучше.
но вместо правильных слов мне бы просто пример реального скрипта. загрузку ajax я не хочу делать, т.к. планируется, что рабочая локалка будет изолирована от интернета...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Советую сразу же переходить на вебсокеты. Собственно, сам сейчас занимаюсь поиском легковесной (а не монстра libwebsockets) сишной библиотеки, умеющей wss. В этом случае будет намного проще обеспечить интерактивность и асинхронность. Если же особо шустрой реакции не нужно, можно на старых добрых CGI делать взаимодействие. Но в этом случае будет сложней обеспечить безопасность: каждый раз придется передавать "сессионный ключ", т.е. он будет мелькать по нескольку раз в секунду!
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
На телефоне не осилю пример, с копипастом беда полная или я пользоваться не умею ) ajax и прочее как принцип, библиотеки готовые можно и не использовать, если в локалке и без прокси, то можно просто открывать http-запрос javascript'том и не закрывать, проверяя по таймеру нет ли новых данных в ответе, точно не помню какой компонент так может, гляну позже.
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Последний раз редактировалось Morroc Ср май 27, 2020 10:56:46, всего редактировалось 2 раз(а).
можно просто открывать http-запрос javascript'том и не закрывать, проверяя по таймеру нет ли новых данных в ответе
вот как это делать?! что там за классы в этом джаваскрипте, что за методы и т.п.? я вчера ковырял эту тему несколько часов, так пока сообразил, что для формирования строки с числами и текстом можно тупо написать var s = "число равно" + 12; и в результате в s у меня будет строка "число равно 12"... темный мрачный лес, короче
Eddy_Em писал(а):
можно на старых добрых CGI делать взаимодействие. Но в этом случае будет сложней обеспечить безопасность: каждый раз придется передавать "сессионный ключ", т.е. он будет мелькать по нескольку раз в секунду!
безопасность пока вообще никак меня не волнует - процесс чисто технологический, безопасный по сути, не коммерческий. а вот что такое сессионный ключ, как он делается, куда и чем отправляется, и для чего служит - вот это я не понимаю совсем.
серверная часть у меня пишется на freepascal, и состоит из модуля Indy HTTP Server, который тупо выдает мне GET-запрос в виде строки... и что там в ней за что отвечает, я понятия не имею. куки какие-то...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Скорее всего это то, что по умному называется SSE, но в этом случае мы получаем только инфу с сервера, в обратную сторону придется как то переоткрыть канал, отправив в новом запросе команду, мне такое не надо было. EventSource(url)
Для управления можно не закрывать соединение со стороны сервера пока нечего отправить клиенту, а как только клиент получит новые данные сразу открывать новое соединение обычным XMLHttpRequest(). Двунаправленно без гемороя websocket, но это уже не http и я не пробовал.
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Экспериментировал на виндовом IIS/ ASP, там достаточно было не завершать скрипт страницы и делать response.flush для сброса буфера клиенту. Насколько это накладно не смотрел.
_________________ "Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл / "Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
безопасность пока вообще никак меня не волнует - процесс чисто технологический, безопасный по сути, не коммерческий. а вот что такое сессионный ключ, как он делается, куда и чем отправляется, и для чего служит - вот это я не понимаю совсем.
Тогда все вообще просто: никаких сессионных ключей не нужно. Просто рисуем веб-морду, которую можно показывать либо своим же демоном (но для этого придется от рута его запускать, что плохо), либо тем же nginx или апачем. Для связи с железякой запускаем свой демон, который слушает определенный порт. А веб-морда при необходимости делает веб-запросы на этот порт. Например, таким образом я сравнительно недавно сделал фокусировку нашего метрового телескопа. Пока все в локалке выполняется, решили не париться с авторизацией (а если кто из студентов будет вредить, по логам вычислим и набьем морду ☺). Веб-морда содержит необходимые поля ввода/вывода, а общается с демоном посредством простых веб-запросов (демон также принимает и запросы по нормальным сокетам - для возможности автоматизации работы). Собственно, кода той самой взаимосвязи - не так уж и много. Основное - работа с самой железкой.
Ну, а если нужна реальная асинхронность, то только веб-сокеты.
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
какие там еще руты?! Win10, на крайний случай, Win7.
в общем, я практически наметил себе путь решения... буду тупо выдавать в браузер страничку со скриптом, который будет каждые N-мс слать на сервер запрос, а сервер будет ему возвращать уже подготовленные атрибуты элементов странички, которые скрипт налету и будет менять - вот и получится обновление страницы без мерцаиня.
тупо, конечно, нерационально наверняка, но вряд ли что лучше я смогу освоить за разумное время - мне еще вспоминать HTML-верстку с CSS, и с нуля учиться работать с javascript... тут не до высоких технологий.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Eddy_Em, смысл сваливаться на уровень веб-сокетов, если есть стандартизованный Push API? ARV, Здесь с примером, как на своем веб-сервере настроить push-уведомления
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения