Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Пт май 22, 2020 08:57:10
Может кто-то объяснить на пальцах, как реализуется такая фича, как уведомление со стороны сервера о том, что инфа на html-страничке изменилась и клиент должен обновить страничку?
Допустим, я сделал программку, которая по мониторит определенный порт и выдает по запросу в этот порт генерируемую HTML-страничку. браузер эту страничку показал, а на страничке, допустим, напряжение АЦП показано.
моя программка измерила в очередной раз напряжение - как она может уведомить клиента о необходимости обновить страничку? Или просто надо рефрешить страничку почаще? как это по уму делается в нынешних условиях?
мне только объяснять надо попроще... и, если есть решение, то тоже минимальной сложности, потому как самое тупое - каждую секунду обновлять страничку, - я и так знаю, как сделать, и альтернатива мне желательна примерно такого уровня сложности... если она есть, конечно.
просто хочу с минимальными заморочками обеспечить возможность на смартфоне видеть то, что я там наизмерял. писать приложение для смартфона - это перебор...
Добавлено after 2 minutes 20 seconds:
да, минус моего тупого решения очевиден - страничка будет "мерцать" наверняка при перезагрузке. вот потому и ищу альтернативу... чтобы обновлять, возможно, не все, а что-то... ну, в этих технологиях я вообще профан... может, вообще чушь несу...
Пт май 22, 2020 09:12:57
зачем нттр? для андроида куча готовых решений есть, да хоть mqtt, blink,
Последний раз редактировалось
kaetzchen Пт май 22, 2020 09:25:36, всего редактировалось 1 раз.
Пт май 22, 2020 09:24:53
при чем тут андроид? браузер есть везде, смысл именно в том, чтобы выдавать страничку, которую хоть на утюге можно посмотреть
Пт май 22, 2020 09:51:53
Вы неправильно понимаете идеологию клиент-серверных взаимодействий.
Серверу лишь положено обслуживать запросы. Поэтому в броузеров есть функция задания периодичности проведения обновления информации с сервера. Там, где присутствует, проверка по дате странички.
Какой будет протокол, это роли не имеет.
Если в рамках идеологии клиент-серверных нужно проводить обновление с удаленной стороны, то меняйте местами клиента с сервером.
Либо устраивайте на удаленной стороне активного агента, как например, в медийных потоковых рассылках.
Пт май 22, 2020 09:56:35
Муркиз писал(а):Либо устраивайте на удаленной стороне активного агента, как например, в медийных потоковых рассылках
вот примерно об этом я и спрашиваю - как это делается? активный агент, как я понимаю, это java-скрипт или что-то типа того, указание на загрузку которого я в коде своей страничке и отправляю? браузер его грузит, запускает, а скрипт потом сам шлет в мою программку запросы и отрисовывает полученные результаты?
моя предполагаемая программа будет работать на компьютере. не хотелось бы всякие апачи и т.п. ставить, хотелось бы обойтись только мониторнгом порта и выдачей в него чего-то там... возможно ли это?
Пт май 22, 2020 12:32:54
Возможно. DDOS в пределе это называется. Вот и бери за шаблон его скрипты для броузера. Если просто закольцованный цикл с запросом трудности написать составляют.
Ср май 27, 2020 07:14:18
Простой вариант - использовать мета-тег refresh на страничке, будет автообновляться и мерцать, вариант посложнее можно поискать по "ajax примеры" - это именно скрипт, тянущий данные со специальной страницы, содержащей только данные, потом скрипт подменяет значения в обьектах страницы без ее перезагрузки.
Ср май 27, 2020 07:44:07
Morroc писал(а):использовать мета-тег refresh на страничке
это мне известно, и в самом первом своем сообщении я об этом писал.
Morroc писал(а):это именно скрипт
меня вот этот вариант больше интересует, но без "тянущихся с других сайтов" скриптов. т.е. мне бы надо скрипты, внедренные сразу в HTML-код возвращаемой странички.
тут бы просто понять, как следует поступать... таймер какой-то, что ли, нужен? или какой-то способ открыть "канал" и ждать, когда по этому каналу придут данные, на которые потом реагировать? вот в этом затык. я понятия не имею, какие средства в джаваскрипте есть для подобного... и есть ли вообще...
Ср май 27, 2020 09:51:49
Понятно. Так тоже делают, можно по "comet ajax" почитать если оставаться в рамках http или "javascript websocket". Незакрываемое соединение я как то пробовал, websocket нет. Мне кажется с минимальными заморочками будет классический ajax без push со стороны сервера если обновление по таймеру устраивает, но ради интереса можно попробовать и "канал", с ним разве что какие то события можно "мгновенно" клиенту отправить, мне кажется это для игрушек и чатов только критично.
Ср май 27, 2020 10:06:22
я планирую таким образом сделать интерфейс управления оборудованием, поэтому, если есть возможность пихать клиенту данные по инициативе сервера - это бы меня устроило как нельзя лучше.
но вместо правильных слов мне бы просто пример реального скрипта. загрузку ajax я не хочу делать, т.к. планируется, что рабочая локалка будет изолирована от интернета...
Ср май 27, 2020 10:15:19
Советую сразу же переходить на вебсокеты.
Собственно, сам сейчас занимаюсь поиском легковесной (а не монстра libwebsockets) сишной библиотеки, умеющей wss. В этом случае будет намного проще обеспечить интерактивность и асинхронность.
Если же особо шустрой реакции не нужно, можно на старых добрых CGI делать взаимодействие. Но в этом случае будет сложней обеспечить безопасность: каждый раз придется передавать "сессионный ключ", т.е. он будет мелькать по нескольку раз в секунду!
Ср май 27, 2020 10:21:14
На телефоне не осилю пример, с копипастом беда полная или я пользоваться не умею ) ajax и прочее как принцип, библиотеки готовые можно и не использовать, если в локалке и без прокси, то можно просто открывать http-запрос javascript'том и не закрывать, проверяя по таймеру нет ли новых данных в ответе, точно не помню какой компонент так может, гляну позже.
Последний раз редактировалось
Morroc Ср май 27, 2020 10:56:46, всего редактировалось 2 раз(а).
Ср май 27, 2020 10:51:49
Morroc писал(а):можно просто открывать http-запрос javascript'том и не закрывать, проверяя по таймеру нет ли новых данных в ответе
вот как это делать?! что там за классы в этом джаваскрипте, что за методы и т.п.? я вчера ковырял эту тему несколько часов, так пока сообразил, что для формирования строки с числами и текстом можно тупо написать var s = "число равно" + 12; и в результате в s у меня будет строка "число равно 12"... темный мрачный лес, короче
Eddy_Em писал(а):можно на старых добрых CGI делать взаимодействие. Но в этом случае будет сложней обеспечить безопасность: каждый раз придется передавать "сессионный ключ", т.е. он будет мелькать по нескольку раз в секунду!
безопасность пока вообще никак меня не волнует - процесс чисто технологический, безопасный по сути, не коммерческий. а вот что такое сессионный ключ, как он делается, куда и чем отправляется, и для чего служит - вот это я не понимаю совсем.
серверная часть у меня пишется на freepascal, и состоит из модуля Indy HTTP Server, который тупо выдает мне GET-запрос в виде строки... и что там в ней за что отвечает, я понятия не имею. куки какие-то...
Ср май 27, 2020 10:58:41
Скорее всего это то, что по умному называется SSE, но в этом случае мы получаем только инфу с сервера, в обратную сторону придется как то переоткрыть канал, отправив в новом запросе команду, мне такое не надо было. EventSource(url)
Для управления можно не закрывать соединение со стороны сервера пока нечего отправить клиенту, а как только клиент получит новые данные сразу открывать новое соединение обычным XMLHttpRequest(). Двунаправленно без гемороя websocket, но это уже не http и я не пробовал.
Ср май 27, 2020 14:30:08
Morroc писал(а):по умному называется SSE, но в этом случае мы получаем только инфу с сервера
то что надо!
SSE - это именно то самое, что я и искал!
проверю, насколько это будет работать с моим самописным сервером
Добавлено after 56 minutes 12 seconds:теперь бы еще понять, как со стороны сервера послать это сообщение... при помощи FreePascal...
Ср май 27, 2020 16:32:05
Экспериментировал на виндовом IIS/ ASP, там достаточно было не завершать скрипт страницы и делать response.flush для сброса буфера клиенту. Насколько это накладно не смотрел.
Ср май 27, 2020 18:37:54
Morroc писал(а):response.flush
угу... знать бы, что это и откуда...
Ср май 27, 2020 22:02:59
безопасность пока вообще никак меня не волнует - процесс чисто технологический, безопасный по сути, не коммерческий. а вот что такое сессионный ключ, как он делается, куда и чем отправляется, и для чего служит - вот это я не понимаю совсем.
Тогда все вообще просто: никаких сессионных ключей не нужно. Просто рисуем веб-морду, которую можно показывать либо своим же демоном (но для этого придется от рута его запускать, что плохо), либо тем же nginx или апачем.
Для связи с железякой запускаем свой демон, который слушает определенный порт. А веб-морда при необходимости делает веб-запросы на этот порт.
Например, таким образом я сравнительно недавно сделал
фокусировку нашего метрового телескопа. Пока все в локалке выполняется, решили не париться с авторизацией (а если кто из студентов будет вредить, по логам вычислим и набьем морду ☺). Веб-морда содержит необходимые поля ввода/вывода, а общается с демоном посредством простых веб-запросов (демон также принимает и запросы по нормальным сокетам - для возможности автоматизации работы). Собственно, кода той самой взаимосвязи - не так уж и много. Основное - работа с самой железкой.
Ну, а если нужна реальная асинхронность, то только веб-сокеты.
Ср май 27, 2020 22:40:05
Eddy_Em писал(а):от рута его запускать
какие там еще руты?! Win10, на крайний случай, Win7.
в общем, я практически наметил себе путь решения... буду тупо выдавать в браузер страничку со скриптом, который будет каждые N-мс слать на сервер запрос, а сервер будет ему возвращать уже подготовленные атрибуты элементов странички, которые скрипт налету и будет менять - вот и получится обновление страницы без мерцаиня.
тупо, конечно, нерационально наверняка, но вряд ли что лучше я смогу освоить за разумное время - мне еще вспоминать HTML-верстку с CSS, и с нуля учиться работать с javascript... тут не до высоких технологий.
Ср май 27, 2020 22:51:09
Eddy_Em, смысл сваливаться на уровень веб-сокетов, если есть стандартизованный Push API?
ARV,
Здесь с примером, как на своем веб-сервере настроить push-уведомления
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.