Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить

HTTP: взаимодействие клиента и сервера

Пт май 22, 2020 08:57:10

Может кто-то объяснить на пальцах, как реализуется такая фича, как уведомление со стороны сервера о том, что инфа на html-страничке изменилась и клиент должен обновить страничку?

Допустим, я сделал программку, которая по мониторит определенный порт и выдает по запросу в этот порт генерируемую HTML-страничку. браузер эту страничку показал, а на страничке, допустим, напряжение АЦП показано.

моя программка измерила в очередной раз напряжение - как она может уведомить клиента о необходимости обновить страничку? Или просто надо рефрешить страничку почаще? как это по уму делается в нынешних условиях?

мне только объяснять надо попроще... и, если есть решение, то тоже минимальной сложности, потому как самое тупое - каждую секунду обновлять страничку, - я и так знаю, как сделать, и альтернатива мне желательна примерно такого уровня сложности... если она есть, конечно.

просто хочу с минимальными заморочками обеспечить возможность на смартфоне видеть то, что я там наизмерял. писать приложение для смартфона - это перебор...

Добавлено after 2 minutes 20 seconds:
да, минус моего тупого решения очевиден - страничка будет "мерцать" наверняка при перезагрузке. вот потому и ищу альтернативу... чтобы обновлять, возможно, не все, а что-то... ну, в этих технологиях я вообще профан... может, вообще чушь несу...

Re: HTTP: взаимодействие клиента и сервера

Пт май 22, 2020 09:12:57

зачем нттр? для андроида куча готовых решений есть, да хоть mqtt, blink,
Последний раз редактировалось kaetzchen Пт май 22, 2020 09:25:36, всего редактировалось 1 раз.

Re: HTTP: взаимодействие клиента и сервера

Пт май 22, 2020 09:24:53

при чем тут андроид? браузер есть везде, смысл именно в том, чтобы выдавать страничку, которую хоть на утюге можно посмотреть

Re: HTTP: взаимодействие клиента и сервера

Пт май 22, 2020 09:51:53

Вы неправильно понимаете идеологию клиент-серверных взаимодействий.
Серверу лишь положено обслуживать запросы. Поэтому в броузеров есть функция задания периодичности проведения обновления информации с сервера. Там, где присутствует, проверка по дате странички.

Какой будет протокол, это роли не имеет.

Если в рамках идеологии клиент-серверных нужно проводить обновление с удаленной стороны, то меняйте местами клиента с сервером.

Либо устраивайте на удаленной стороне активного агента, как например, в медийных потоковых рассылках.

Re: HTTP: взаимодействие клиента и сервера

Пт май 22, 2020 09:56:35

Муркиз писал(а):Либо устраивайте на удаленной стороне активного агента, как например, в медийных потоковых рассылках
вот примерно об этом я и спрашиваю - как это делается? активный агент, как я понимаю, это java-скрипт или что-то типа того, указание на загрузку которого я в коде своей страничке и отправляю? браузер его грузит, запускает, а скрипт потом сам шлет в мою программку запросы и отрисовывает полученные результаты?

моя предполагаемая программа будет работать на компьютере. не хотелось бы всякие апачи и т.п. ставить, хотелось бы обойтись только мониторнгом порта и выдачей в него чего-то там... возможно ли это?

Re: HTTP: взаимодействие клиента и сервера

Пт май 22, 2020 12:32:54

Возможно. DDOS в пределе это называется. Вот и бери за шаблон его скрипты для броузера. Если просто закольцованный цикл с запросом трудности написать составляют.

Re: HTTP: взаимодействие клиента и сервера

Ср май 27, 2020 07:14:18

Простой вариант - использовать мета-тег refresh на страничке, будет автообновляться и мерцать, вариант посложнее можно поискать по "ajax примеры" - это именно скрипт, тянущий данные со специальной страницы, содержащей только данные, потом скрипт подменяет значения в обьектах страницы без ее перезагрузки.

Re: HTTP: взаимодействие клиента и сервера

Ср май 27, 2020 07:44:07

Morroc писал(а):использовать мета-тег refresh на страничке
это мне известно, и в самом первом своем сообщении я об этом писал.
Morroc писал(а):это именно скрипт
меня вот этот вариант больше интересует, но без "тянущихся с других сайтов" скриптов. т.е. мне бы надо скрипты, внедренные сразу в HTML-код возвращаемой странички.

тут бы просто понять, как следует поступать... таймер какой-то, что ли, нужен? или какой-то способ открыть "канал" и ждать, когда по этому каналу придут данные, на которые потом реагировать? вот в этом затык. я понятия не имею, какие средства в джаваскрипте есть для подобного... и есть ли вообще...

Re: HTTP: взаимодействие клиента и сервера

Ср май 27, 2020 09:51:49

Понятно. Так тоже делают, можно по "comet ajax" почитать если оставаться в рамках http или "javascript websocket". Незакрываемое соединение я как то пробовал, websocket нет. Мне кажется с минимальными заморочками будет классический ajax без push со стороны сервера если обновление по таймеру устраивает, но ради интереса можно попробовать и "канал", с ним разве что какие то события можно "мгновенно" клиенту отправить, мне кажется это для игрушек и чатов только критично.

Re: HTTP: взаимодействие клиента и сервера

Ср май 27, 2020 10:06:22

я планирую таким образом сделать интерфейс управления оборудованием, поэтому, если есть возможность пихать клиенту данные по инициативе сервера - это бы меня устроило как нельзя лучше.

но вместо правильных слов мне бы просто пример реального скрипта. загрузку ajax я не хочу делать, т.к. планируется, что рабочая локалка будет изолирована от интернета...

Re: HTTP: взаимодействие клиента и сервера

Ср май 27, 2020 10:15:19

Советую сразу же переходить на вебсокеты.
Собственно, сам сейчас занимаюсь поиском легковесной (а не монстра libwebsockets) сишной библиотеки, умеющей wss. В этом случае будет намного проще обеспечить интерактивность и асинхронность.
Если же особо шустрой реакции не нужно, можно на старых добрых CGI делать взаимодействие. Но в этом случае будет сложней обеспечить безопасность: каждый раз придется передавать "сессионный ключ", т.е. он будет мелькать по нескольку раз в секунду!

Re: HTTP: взаимодействие клиента и сервера

Ср май 27, 2020 10:21:14

На телефоне не осилю пример, с копипастом беда полная или я пользоваться не умею ) ajax и прочее как принцип, библиотеки готовые можно и не использовать, если в локалке и без прокси, то можно просто открывать http-запрос javascript'том и не закрывать, проверяя по таймеру нет ли новых данных в ответе, точно не помню какой компонент так может, гляну позже.
Последний раз редактировалось Morroc Ср май 27, 2020 10:56:46, всего редактировалось 2 раз(а).

Re: HTTP: взаимодействие клиента и сервера

Ср май 27, 2020 10:51:49

Morroc писал(а):можно просто открывать http-запрос javascript'том и не закрывать, проверяя по таймеру нет ли новых данных в ответе
вот как это делать?! что там за классы в этом джаваскрипте, что за методы и т.п.? я вчера ковырял эту тему несколько часов, так пока сообразил, что для формирования строки с числами и текстом можно тупо написать var s = "число равно" + 12; и в результате в s у меня будет строка "число равно 12"... темный мрачный лес, короче

Eddy_Em писал(а):можно на старых добрых CGI делать взаимодействие. Но в этом случае будет сложней обеспечить безопасность: каждый раз придется передавать "сессионный ключ", т.е. он будет мелькать по нескольку раз в секунду!
безопасность пока вообще никак меня не волнует - процесс чисто технологический, безопасный по сути, не коммерческий. а вот что такое сессионный ключ, как он делается, куда и чем отправляется, и для чего служит - вот это я не понимаю совсем.

серверная часть у меня пишется на freepascal, и состоит из модуля Indy HTTP Server, который тупо выдает мне GET-запрос в виде строки... и что там в ней за что отвечает, я понятия не имею. куки какие-то... :facepalm:

Re: HTTP: взаимодействие клиента и сервера

Ср май 27, 2020 10:58:41

Скорее всего это то, что по умному называется SSE, но в этом случае мы получаем только инфу с сервера, в обратную сторону придется как то переоткрыть канал, отправив в новом запросе команду, мне такое не надо было. EventSource(url)

Для управления можно не закрывать соединение со стороны сервера пока нечего отправить клиенту, а как только клиент получит новые данные сразу открывать новое соединение обычным XMLHttpRequest(). Двунаправленно без гемороя websocket, но это уже не http и я не пробовал.

Re: HTTP: взаимодействие клиента и сервера

Ср май 27, 2020 14:30:08

Morroc писал(а):по умному называется SSE, но в этом случае мы получаем только инфу с сервера
то что надо! :beer:
SSE - это именно то самое, что я и искал!
проверю, насколько это будет работать с моим самописным сервером :)))

Добавлено after 56 minutes 12 seconds:
теперь бы еще понять, как со стороны сервера послать это сообщение... при помощи FreePascal...

Re: HTTP: взаимодействие клиента и сервера

Ср май 27, 2020 16:32:05

Экспериментировал на виндовом IIS/ ASP, там достаточно было не завершать скрипт страницы и делать response.flush для сброса буфера клиенту. Насколько это накладно не смотрел.

Re: HTTP: взаимодействие клиента и сервера

Ср май 27, 2020 18:37:54

Morroc писал(а):response.flush
угу... знать бы, что это и откуда...

Re: HTTP: взаимодействие клиента и сервера

Ср май 27, 2020 22:02:59

безопасность пока вообще никак меня не волнует - процесс чисто технологический, безопасный по сути, не коммерческий. а вот что такое сессионный ключ, как он делается, куда и чем отправляется, и для чего служит - вот это я не понимаю совсем.

Тогда все вообще просто: никаких сессионных ключей не нужно. Просто рисуем веб-морду, которую можно показывать либо своим же демоном (но для этого придется от рута его запускать, что плохо), либо тем же nginx или апачем.
Для связи с железякой запускаем свой демон, который слушает определенный порт. А веб-морда при необходимости делает веб-запросы на этот порт.
Например, таким образом я сравнительно недавно сделал фокусировку нашего метрового телескопа. Пока все в локалке выполняется, решили не париться с авторизацией (а если кто из студентов будет вредить, по логам вычислим и набьем морду ☺). Веб-морда содержит необходимые поля ввода/вывода, а общается с демоном посредством простых веб-запросов (демон также принимает и запросы по нормальным сокетам - для возможности автоматизации работы). Собственно, кода той самой взаимосвязи - не так уж и много. Основное - работа с самой железкой.

Ну, а если нужна реальная асинхронность, то только веб-сокеты.

Re: HTTP: взаимодействие клиента и сервера

Ср май 27, 2020 22:40:05

Eddy_Em писал(а):от рута его запускать
какие там еще руты?! Win10, на крайний случай, Win7.

в общем, я практически наметил себе путь решения... буду тупо выдавать в браузер страничку со скриптом, который будет каждые N-мс слать на сервер запрос, а сервер будет ему возвращать уже подготовленные атрибуты элементов странички, которые скрипт налету и будет менять - вот и получится обновление страницы без мерцаиня.

тупо, конечно, нерационально наверняка, но вряд ли что лучше я смогу освоить за разумное время - мне еще вспоминать HTML-верстку с CSS, и с нуля учиться работать с javascript... тут не до высоких технологий.

Re: HTTP: взаимодействие клиента и сервера

Ср май 27, 2020 22:51:09

Eddy_Em, смысл сваливаться на уровень веб-сокетов, если есть стандартизованный Push API?
ARV, Здесь с примером, как на своем веб-сервере настроить push-уведомления
Ответить