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

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

Ср май 27, 2020 23:05:14

ПростоНуб писал(а):как на своем веб-сервере настроить push-уведомления
абсолютно неприемлемый вариант - дико сложный.

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

Чт май 28, 2020 00:08:05

какие там еще руты?! Win10, на крайний случай, Win7.

Соболезную: в игровой прошивке программировать — смерти подобно!
Eddy_Em, смысл сваливаться на уровень веб-сокетов, если есть стандартизованный Push API?

Ни разу в жизни про это не слыхал! Если имеются в виду PUSH-запросы, то никакие они не "стандартизированные". Да и вообще их никто не использует, пользуются POST или GET.
И запросы не дают возможности сделать полноценно асинхронную систему. Асинхронность - только с вебсокетами! Жаль только, что для "секурных" вебсокетов ничего нормального нет: libwebsockets — полная жесть (жирный и неповоротливый, да и кода надо такие дикие простыни писать, то спасибо - не надо). Нашел хорошую замену, но там, к сожалению, нет WSS.

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

Чт май 28, 2020 09:02:34

Eddy_Em, а по ссылке пройти и почитать сил не хватило, если Вы "ни разу в жизни про это не слышали"? )))

Добавлено after 1 hour 14 minutes 59 seconds:
ARV, Вы точно прочитали статью по ссылке? По мне так, куда уж проще:
1. Зарегистрироваться на firebase
2. Сделать облачный проект при помощи copy-paste из статьи.
3. Отправлять с веб-сервера уведомления на firebase обычным POST вообще без HTML, используя простейший JSON

Если на Вашем веб-сервере еще нет HTTPS, то еще два шага
1. Установить на веб-сервере ACME клиент
2. Настроить его для автоматической сертификации на letsencrypt.org

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

Чт май 28, 2020 09:27:52

ПростоНуб писал(а):Вы точно прочитали статью по ссылке?
а вы точно прочитали мои вопросы и условия из первых сообщений в теме?

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

Чт май 28, 2020 09:47:36

ARV, Естественно. Вы хотите, чтобы смартфон без всякого дополнительного ПО мог получать уведомления от Вашего же веб-сервера. Код JS обработчика push уведомлений на веб-странице по ссылке есть. Все мобильные браузеры push-уведомления поддерживают. Что еще?

Как ни крути, но по инициативе сервера обратиться к браузеру на смартфоне не возможно. По той простой причине, что в 99% случаев он находится за NAT провайдера (исключение - IPv6 предоставляемое одним и тем же провайдером и для телефона, и для веб-сервера).
Поэтому, прежде чем получать какие-либо уведомления, какое-либо приложение на смартфоне должно установить соединение с каким-либо сервисом по TCP (WebSocket). Но никоуровневая работа с WebSocket заметно сложнее, чем использование готового Push API, использующего тот же WebSocket.

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

Чт май 28, 2020 09:56:52

Eddy_Em, а по ссылке пройти и почитать сил не хватило, если Вы "ни разу в жизни про это не слышали"? )))

Прошел. Там треш какой-то вообще не нужный. Я понял, о чем речь — об этих назойливых всплывающих сообщениях. Нет, оно не годится для "общения" со своим железом. Уж тем паче — асинхронного общения.
Я нашел в интернетах отличную библиотеку для вебсокетов: примеры вообще поражают своей минимальностью. Проблема лишь в отсутствии WSS, но ARV это не нужно. Думаю, как раз она бы ему и пригодилась: NGINX'ом выдавать статику, а вебсокетами общаться.

Добавлено after 1 minute 45 seconds:
Но никоуровневая работа с WebSocket заметно сложнее, чем использование готового Push API, использующего тот же WebSocket.

Спасибо, поржал!
Посмотрите примеры по ссылочке, что я дал. А потом сравните с той тонной жабоскрипта, который нужен для этих "пуш-уведомлений". Я уж не говорю о том, что server-side ARV придется самому писать: я в той статье на быдлохабре что-то не видел примеров кода на С для сервера!

И да, обычно все эти "пуш-уведомления" пользователь намертво отключает, т.к. они — зло!

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

Чт май 28, 2020 10:24:50

не годится для "общения" со своим железом. Уж тем паче — асинхронного общения.

Оно именно для асинхронного общения предназначено отродясь )
И раз Вы не умеете читать статьи, цитирую Вам весь код на странице для приема этих уведомлений:
Спойлер
Код:
if ('Notification' in window) {
    var messaging = firebase.messaging();

    messaging.onMessage(function(payload) {
        console.log('Message received. ', payload);
        new Notification(payload.notification.title, payload.notification);
    });

    // ...
}
// ...

Eddy_Em писал(а):я в той статье на быдлохабре что-то не видел примеров кода на С для сервера!

Это потому, что из-за своей ограниченности Вы даже не представляете, что данную задачу можно решить простейшим скриптом на PHP, запускаемым прямо в консоли, и который тоже есть в статье )))
Спойлер
Код:
#!/usr/bin/env php
<?php

$url = 'https://fcm.googleapis.com/fcm/send';
$YOUR_API_KEY = ''; // Server key
$YOUR_TOKEN_ID = ''; // Client token id

$request_body = [
    'to' => $YOUR_TOKEN_ID,
    'notification' => [
        'title' => 'Ералаш',
        'body' => sprintf('Начало в %s.', date('H:i')),
        'icon' => 'https://eralash.ru.rsz.io/sites/all/themes/eralash_v5/logo.png?width=192&height=192',
        'click_action' => 'http://eralash.ru/',
    ],
];
$fields = json_encode($request_body);

$request_headers = [
    'Content-Type: application/json',
    'Authorization: key=' . $YOUR_API_KEY,
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
curl_close($ch);

echo $response;


В любом случае, формировать простейший POST с JSON на C - это надо или с головой посориться, или, кроме C, ни одного языка не знать )))
Спойлер
Код:
POST /fcm/send HTTP/1.1
Host: fcm.googleapis.com
Authorization: key=YOUR-SERVER-KEY
Content-Type: application/json

{
  "notification": {
    "title": "Ералаш",
    "body": "Начало в 21:00",
    "icon": "https://eralash.ru.rsz.io/sites/all/themes/eralash_v5/logo.png?width=40&height=40",
    "click_action": "http://eralash.ru/"
  },
  "to": "YOUR-TOKEN-ID"
}

Eddy_Em писал(а):И да, обычно все эти "пуш-уведомления" пользователь намертво отключает, т.к. они — зло!

Вообще все никто не отключает, так как через них приходит, в том числе, важная информация. Например, у 99.9% пользователей Android разрешены Push уведомления. Чтобы, хотя бы, знать о необходимости обновления установленных приложений, балансе счета, погоде и т.п.
А от каких серверов принимать push уведомления решает только пользователь. Не будете же Вы запрещать уведомления от собственного веб-сервера? )))

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

Чт май 28, 2020 12:26:58

ПростоНуб писал(а):Что еще?
то, что сервер должен уметь эти самые сообщения отправлять. поскольку "сервер" тут лишь по поведению сервер, пишу его я сам, даже мечтать нельзя о чем-то типа php, python или еще чем-то подобном, на чем стандартно реализуется серверная часть для этих самых push-ей.

именно поэтому я принял решение просто слать запросы из браузерного javascript-а на мой сервер каждые 100 мс (для примеру). и это решает 100% моих проблем без намека на весь тот сахар, что вы предлагаете.

и не забывайте - речь не о веб-сервере, а о сервере в локальной сети, образованной точкой доступа смартфона, и в сети этой будет, помимо смартфона, только МК с моим сервером. :)))

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

Чт май 28, 2020 18:57:58

цитирую Вам весь код на странице для приема этих уведомлений

А можно еще сишный код, чтобы это уведомление послать?
данную задачу можно решить простейшим скриптом на PHP

Я что, быдло какое, чтобы на пыхпыхе что-то делать?
А если серьезно, хотел бы я посмотреть на скрипт на пыхпыхе, который будет по CAN-шине и USB работать с железками, что-то там в реальном времени вычислять и обеспечивать интерфейс взаимодействия с пользователями.
Ну, а вообще, пыхпых сдох уже лет 10 назад вместе с флешем! Гнилые, никому не нужные технологии!
формировать простейший POST с JSON на C - это надо или с головой посориться

Что за наезд? Зачем изучать всякое говно вроде пхытонов, если все это элементарным образом на С делается?
Поражаюсь с этих хипстеров!
Давайте еще на дотнете запилим, а вместо операционной системы — "десяточку"!
знать о необходимости обновления установленных приложений, балансе счета, погоде и т.п.

О необходимости обновления "напоминает" пакетный менеджер, больше некому об этом заботиться.
О балансе напоминает СМСка.
О погоде — приложение или плагин, которое периодически POST-запросом вытаскивает данные с сайта.
Места для "пуш-уведомлений" нет вообще нигде!!!
слать запросы из браузерного javascript-а на мой сервер каждые 100 мс

В корне неверное решение! Если нужно данные так часто передавать, то кроме вебсокетов вариантов немного: либо fastCGI на NGINX, либо свой демон, который слушает определенный порт (скажем, 12345).
Если вы не в курсе, то обычный CGI запускается на каждый запрос! Т.е. ОСь будет считывать его с диска (правда, при частых запросах он будет уже кэширован в память, если, конечно, вы не пользуетесь прошивкой для игровых приставок вместо операционной системы), копировать в память, запускать стартап и потом запускать его!

Очень советую подумать о вебсокетах. И работать с ними несложно. Вот — полный код эхо веб-сокета:
Код:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <ws.h>

void onopen(int fd)
{
        char *cli;
        cli = ws_getaddress(fd);
        printf("Connection opened, client: %d | addr: %s\n", fd, cli);
        free(cli);
}

void onclose(int fd)
{
        char *cli;
        cli = ws_getaddress(fd);
        printf("Connection closed, client: %d | addr: %s\n", fd, cli);
        free(cli);
}

void onmessage(int fd, const unsigned char *msg)
{
        char *cli;
        cli = ws_getaddress(fd);
        printf("I receive a message: %s, from: %s/%d\n", msg, cli, fd);
        ws_sendframe(fd, (char *)msg, true);
        free(cli);
}

int main()
{
        struct ws_events evs;
        evs.onopen    = &onopen;
        evs.onclose   = &onclose;
        evs.onmessage = &onmessage;
        ws_socket(&evs, 8080);

        return 0;
}


Добавлено after 3 minutes 44 seconds:
Код:
ws_sendframe(fd, (char *)msg, true);

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

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

Чт май 28, 2020 19:31:42

Eddy_Em писал(а):В корне неверное решение!
я сомневаюсь, что вы можете дать мне адекватный совет после ранее выданных "комментариев". нормальное решение, будет работать.

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

Чт май 28, 2020 20:02:05

ARV, для начала советую все-таки вместо прошивки для игровых приставок поставить на компьютер операционную систему.
Разработка всяких сервисных утилит значительно упростится!

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

Чт май 28, 2020 20:14:47

Eddy_Em писал(а):советую все-таки вместо прошивки для игровых приставок поставить на компьютер операционную систему
о чем я говорил - адекватности вам не хватает явно...

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

Чт май 28, 2020 21:04:43

ARV, кому не хватает - мне?
В своем глазу бревно сначала разглядите!!!

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

Чт май 28, 2020 21:21:41

какие там бревна?! вы разве не обращаете внимание, что все ваши советы всегда начинаются, заканчиваются и вообще исчерпываются призывом сменить ОС с винды на линух?
если по теме винды вам сказать нечего (а я ведь конкретно очертил круг проблемы), для чего вообще вы тут выступаете?

когда я спрашивал в теме про линух, никто мне ничего толкового посоветовать не мог, кроме чтения манов... в вашем линухе так заведено: сначала обосрать ОС, которой пользуются 90% всех пользователей на планете, заманить неориентирующегося пользователя в свои сети, а потом при возникновении вопросов глумиться? спасибо, такая помощь мне не нужна - проходите мимо!

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

Чт май 28, 2020 22:29:30

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

На чем угодно. Или для Вас есть сложность запрограммировать посылку на 443-й TCP порт облачного Firebase приведенного в статье пакета?
Спойлер
Код:
POST /fcm/send HTTP/1.1
Host: fcm.googleapis.com
Authorization: key=YOUR-SERVER-KEY
Content-Type: application/json

{
  "notification": {
    "title": "Ералаш",
    "body": "Начало в 21:00",
    "icon": "https://eralash.ru.rsz.io/sites/all/themes/eralash_v5/logo.png?width=40&height=40",
    "click_action": "http://eralash.ru/"
  },
  "to": "YOUR-TOKEN-ID"
}


К тому же, обычно, IoT МК все равно сидит за веб-сервером. Хотя бы потому, что IPv6 большинство МК не тянут (или тянут подмножество из RFC 6434, с неприемлемым уровнем безопасности), а платить ежемесячно за статический IPv4 адрес для каждого своего МК - накладно.


Eddy_Em писал(а):А можно еще сишный код, чтобы это уведомление послать?

Я что быдло, писать код на C для того, кто не только не умеет это делать, но еще выпендривается? )))

Eddy_Em писал(а):хотел бы я посмотреть на скрипт на пыхпыхе, который будет по CAN-шине и USB работать с железками, что-то там в реальном времени вычислять и обеспечивать интерфейс взаимодействия с пользователями.

Вы опять из-за собственной ограниченности не понимаете, что универсального языка или средства разработки на все случаи жизни просто не существует!
Я так же хотел бы посмотреть, как Вы будете портал для rich web application писать на C. Пока напишете, или состаритесь, или он уже никому нужен не будет )))
А если Вы еще начнете с БД не на SQL/MDX/DAX, а на голом C общаться, как в середине прошлого века, то можно будет вообще уписаться )))
Так же хотел бы я посмотреть, как Вы вместо MathLAB или R займетесь предиктивным анализом на C. ))) Вы нелинейный сезонный ПИД на C моделируете? :shock: Подбираете модель ARIMA c фильтром Калмана на голом C?

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

Чт май 28, 2020 23:01:02

ПростоНуб, я все числодробилки исключительно на С пишу. В Octave делаю анализ и проверяю алгоритмы. Если все работает - вперед!
Не пхытоном же уродским пользоваться!
И да, с БД на sqlite я тоже "общаюсь" исключительно из сишного кода! Не баш-скриптом же это делать!!!

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

Чт май 28, 2020 23:24:34

И да, с БД на sqlite я тоже "общаюсь" исключительно из сишного кода!

Вы лжете. Работать с SQLite без использования языка SQL исключительно на C через sqlite3_file_control() бессмысленно и мало реально.
А из компилируемых языков вызов интерпретатора - обычное дело. Но это и есть программирование уже на интерпретаторе (пусть даже том же SQL), а не на компилируемом языке.
Хотя, похоже, Вам что-то объяснять бессмысленно. Вы искренне считаете, что все задачи можно решить одним инструментом и готовы забивать гвозди микроскопом )))
"Послушайте! Ведь, если звезды зажигают - значит - это кому-нибудь нужно!" (с) Маяковский В.В.

Добавлено after 5 minutes 59 seconds:
Eddy_Em писал(а):я все числодробилки исключительно на С пишу.

Жду примера подбора модели ARIMA для пары миллионов таймсерий на C )))
Для сравнния, на R + plpgsql это пишется за пять минут. За 15 минут - в многопоточном виде.

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

Пт май 29, 2020 08:28:16

ПростоНуб писал(а):Или для Вас есть сложность запрограммировать посылку на 443-й TCP порт облачного Firebase приведенного в статье пакета?
именно так. вы стараетесь подогнать привычные для вас решения к моему случаю. собственно, как и Eddy_Em, то есть вы не пытаетесь решить мою задачу, а рассказываете, как решали свою. увы, кроме общей информации, толку от ваших советов мало - у меня другой случай.

у меня нет интернета, нет облака, есть локалка с двумя узлами - ПК и смартфон. больше ничего нет, ни шлюза в сеть, ни NAT, ни чего-то еще.
все, что мне нужно, я должен делать сам: нужна база - должен её создавать сам, нужно "облако" - должен его реализовать... умею я это делать только на паскале, причем за счет богатой базы готовых компонентов. для простого http-сервера, способного держать 2-3 соединения без проблем, есть готовый компонент, которым я и пользуюсь для решения своих задач. никакого puch-а там нет, и как его делать не понятно. и, главное, не понятно, зачем его делать для моего случая? полностью достаточно того, о чем я уже писал: джаваскриптом периодически делать GET на сервер, оттуда получать содержимое элементов странички и динамически их обновлять. полностью безоблачно.

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

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

Пт май 29, 2020 10:03:35

Вы лжете. Работать с SQLite без использования языка SQL исключительно на C через sqlite3_file_control() бессмысленно и мало реально.

Ну вот, нуб меня и во лжи обвинил!
Естественно, С использует вызовы языка SQL! Невозможно "общаться" с БД на SQL без самого SQL! Но делается это напрямую из С. Вот! Я как раз собираюсь на днях делать рефакторинг этой своей библиотечки. Буду ее использовать для аутентификации по https, а wsServer — для общения с железом.
Жду примера подбора модели ARIMA для пары миллионов таймсерий на C )))

Я без понятия, что это. Мои задачи: анализ изображений, расчет некоторых моделей. Для всего этого С хватает с головой: pthreads, openMP. Ну, разве что для CUDA приходится в псевдо-С++ стиле писать.

P.S. Погуглил, что такое ARIMA — нет, у меня точно таких данных нет. Вот РАТАНовцам, скорее всего, что-то подобное приходится решать. И после перехода с фортрана на С где-то в конце 80-х годов, они все это пишут на С!!!
Сейчас только молодые хипстеры, которые еще не набили достаточно шишек и считают себя самыми умными, пытаются писать на всяких недоЯПах вроде пхытона. Но потом к ним таки приходит озарение, что если им нужно сделать дико сложную числодробилку, и ждать 100 лет не хочется, то делать это нужно исключительно на вменяемых языках: фортране, С или С++.

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

Пт май 29, 2020 10:51:21

у меня нет интернета, нет облака, есть локалка с двумя узлами - ПК и смартфон.

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

Eddy_Em писал(а):Невозможно "общаться" с БД на SQL без самого SQL!

С SQLite возможно, я даже указал как )
Вы же вроде бы утверждали, что все пишете на C? А тут вдруг интерпретируемый SQL оказывается используете :)))

Eddy_Em писал(а):P.S. Погуглил, что такое ARIMA — нет, у меня точно таких данных нет.

Значит никаких серьезных вычислительных задач Вы вообще не решаете, хотя выступаете тут )))
А ведь ARIMA - это простейшая предиктивная модель! Сейчас даже контроллеры лифтов в крупных офисных зданиях ее используют. Впрочем, как и любые контроллеры, где востребовано предсказание показаний датчиков.

Eddy_Em писал(а):И после перехода с фортрана на С где-то в конце 80-х годов, они все это пишут на С!!!

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

Eddy_Em писал(а):делать это нужно исключительно на вменяемых языках

Собственно говоря именно тем и отличается профессиональный программист от "хипстера", вроде Вас, что ему совершенно безразлично на каких языках написан проект, который нужно развивать и поддерживать.
Лично мне глубоко монопенисуально, на каком языке мне дали пример кода. Хоть на бэйсике, PL/I, PHP, Lisp, SAS или Cobol. Алгоритм и так виден, а если язык примера не устраивает, по каким-то причинам, портирую код на нужный в данном случае язык. Вас же сразу коробит от кода на PHP, как студента первого курса :)))
Если бы я Вам привел пример кода на Cobol или Lisp Вас бы, походу, вообще кондрашка хватила )))
Ответить