Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Архитектура для black box.  [new]
CEMb
Member

Откуда: Столько
Сообщений: 2129
Добрый день

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

Приложение, типа сервис.
Вопрос: как лучше сделать общение с другими процессами? Нужно возвращать данные по запросам, а так же сигнализировать о смене состояний. Т.е. общение в две стороны.

Моя идея: http. Универсально. Сервис может на запрос выдавать страничку со своим состоянием. Или лог. А через post им можно управлять. Т.е. можно просто взять браузер и посмотреть.
Только как-то по http можно подписаться на события? Чтобы не клиент по таймауту опрашивал сервер, а сервер сам информировал? В tcp/ip это делалось двумя сокетами, в обе стороны. А тут как?

Есть какие-то готовые http-сервера для c++? Типа встроить себе в код. Последний раз интересовался этой темой лет 20 назад, тогда народ использовал WinInet. Сейчас вроде как проще, где-то вроде бы даже скачивал примерчик[u][/u] на работе.

Какие ещё есть варианты для общения с black-box?

PS: возможно понадобится портировать на линупс.
6 окт 20, 20:11    [22209819]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

CEMb
В tcp/ip это делалось двумя сокетами, в обе стороны.

Вообще-то для этого и одного сокета хватает. И HTTP в управлении сервисом совершенно
излишен. Как и вообще сеть. Достаточно вызова QueryServiceStatus() и ControlService() с
кодами 128-255, раз уж у тебя это сервис.

Posted via ActualForum NNTP Server 1.5

6 окт 20, 20:18    [22209822]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 760
CEMb
Добрый день

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

Приложение, типа сервис.
Вопрос: как лучше сделать общение с другими процессами? Нужно возвращать данные по запросам, а так же сигнализировать о смене состояний. Т.е. общение в две стороны.

Моя идея: http. Универсально. Сервис может на запрос выдавать страничку со своим состоянием. Или лог. А через post им можно управлять. Т.е. можно просто взять браузер и посмотреть.
Только как-то по http можно подписаться на события? Чтобы не клиент по таймауту опрашивал сервер, а сервер сам информировал? В tcp/ip это делалось двумя сокетами, в обе стороны. А тут как?

Есть какие-то готовые http-сервера для c++? Типа встроить себе в код. Последний раз интересовался этой темой лет 20 назад, тогда народ использовал WinInet. Сейчас вроде как проще, где-то вроде бы даже скачивал примерчик[u][/u] на работе.

Какие ещё есть варианты для общения с black-box?

PS: возможно понадобится портировать на линупс.


Если я правильно понял ваш вопрос, у вас есть полезный код, который вы хотите обернуть в API, и выбираете этот самый API.

Тут у вас богатый выбор, плюс разные платформы имеют дополнительные возможности.

Сорок лет назад это скорее всего был бы RPC.
Лет тридцать назад вы бы обернули его в DLL и дали C-шный интерфейс. Или ActiveX/OCX.
Двадцать назад могли сделать через ДКОМ.
Десять лет назад - был модным Веб сервис через SOAP.

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

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

Если выбирать надо прям сейчас, посмотрите на LRPC. Его потом можно задокументировать, или обернуть во что угодно.
6 окт 20, 20:24    [22209823]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
НеофитSQL,
>Десять лет назад - был модным Веб сервис через SOAP.
== сейчас REST На HTTP
6 окт 20, 20:46    [22209834]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
CEMb,

Что выбрать для межпроцессного взаимодействия модулей приложений?
Если линукс то имхо D-Bus.
Ну и потом, надо смотреть что за команды будет клиент отдавать.
Чтобы удобно ему было.
Ведь REST это тоже почти названия методов с параметрами
sql.ru/app/api/товар/12345/цена? update=345
6 окт 20, 21:21    [22209840]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 760
PetroNotC Sharp
НеофитSQL,
>Десять лет назад - был модным Веб сервис через SOAP.
== сейчас REST На HTTP


А я так сдерживался.. :)
6 окт 20, 23:05    [22209863]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49762
Можно сделать REST сервер. А клиента написать на Python для простоты.
7 окт 20, 10:22    [22209962]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
White Owl
Member

Откуда:
Сообщений: 12583
А еще можно делать "подписку".
Клиент ходит на сервер и спрашивает его о чем-то (да хоть стандартный HTTP).
Но при нужде - клиент может сам открыть слушающий порт и сообщить серверу (по базовому протоколу): "Я хочу знать когда случатся такие-то события. Шли сообщения на мой адрес, на такой-то порт".
7 окт 20, 16:54    [22210324]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
White Owl,
WebSocket называется. В любом браузере есть.
https://ru.m.wikipedia.org/wiki/WebSocket#:~:text=WebSocket — протокол связи поверх TCP,сервером в режиме реального времени.
7 окт 20, 16:58    [22210328]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49762
Это слишком усложняет клиента. В простейшем случае (telnet, http) консоль ведет себя
в режиме диалога. Клиент спрашивает. Сервер (black-box) отвечает.

WebSocket потребует отдельный канал печати сообщений. Куда их печатать в режиме
простой консоли - непонятно. Если туда-же где пользователь вбивает ввод - то будет
путаница.
7 окт 20, 17:02    [22210329]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
White Owl
Member

Откуда:
Сообщений: 12583
PetroNotC Sharp
White Owl,
WebSocket называется. В любом браузере есть.
https://ru.m.wikipedia.org/wiki/WebSocket#:~:text=WebSocket — протокол связи поверх TCP,сервером в режиме реального времени.
Ну, да. Есть такое.
Но это вообще-то более общий подход, не привязанный к TCP/IP.
Некоторые БД (SA например) поддерживают push на этом принципе.
Даже ETL на email такое делали.

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

Сообщение было отредактировано: 7 окт 20, 17:01
7 окт 20, 17:04    [22210332]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
White Owl,
Я бы разделил веб проект или десктоп.
Автор как то хочет все вместе.
Слишком большой оверхед если вместе. Я бы не.
7 окт 20, 17:21    [22210342]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49762
Я-бы еще разделил задачи мониторинга и управления на разные API.
Например для мониторинга приложение может выставить порт SNMP
и с этого порта (теоретически можно снимать метрики загрузки) и рисовать
красивые графики нагрузки, клиентов и т.п. Я не работал с SNNP
на С++ но убежден что либ - навалом.
7 окт 20, 17:26    [22210349]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 760
mayton
Я-бы еще разделил задачи мониторинга и управления на разные API.
Например для мониторинга приложение может выставить порт SNMP
и с этого порта (теоретически можно снимать метрики загрузки) и рисовать
красивые графики нагрузки, клиентов и т.п. Я не работал с SNNP
на С++ но убежден что либ - навалом.


^^^^^^___ правильно.

Хоббисты предпочитают бесплатный софт и с исходниками, сами допилят.
А профи, если готовы платить, то им недосуг к чему-то новому привыкать.
Оно должно работать с тем, что у них есть (HP Open View, MoM3, и т.д.).

На правах моего мнения :)
7 окт 20, 23:46    [22210528]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
CEMb
Member

Откуда: Столько
Сообщений: 2129
Dimitry Sibiryakov
Достаточно вызова QueryServiceStatus() и ControlService() с
кодами 128-255, раз уж у тебя это сервис.
Был план отказаться от сервиса (и он воплощён в жизнь уже). В перспективе возможен Линупс, там нет сервисов

НеофитSQL
Лет тридцать назад вы бы обернули его в DLL и дали C-шный интерфейс. Или ActiveX/OCX.
Двадцать назад могли сделать через ДКОМ.
хочется отказаться от Windows-технологий по максимуму.
НеофитSQL
Сорок лет назад это скорее всего был бы RPC.
RPC же под Линупсом есть? RPC мне нравится, но для него надо будет писать отдельный клиент.

Смотрите.

Если я встраиваю http-сервер в своё приложение, клиент автоматически написан - это любой браузер. Проблему с сетями мы решим, заказчик - наша же корпорация. Достаточно будет запускать браузер локально, на той же машине. Если можно будет управлять удалённо - ну вообще чудно. Можно сделать через RPC, но тогда придётся делать свой клиент, к нему UI для настройки соединения, т.е. то же своё недо-http-сервер-браузер, но сильно упрощённое и с багами. В готовом http всё уже есть. Мелкие http-сервера должны быть в природе, я помню в 2002-м примерно году я встраивал очень мелкий http-сервер с сервлетами в апплет на яве. Это сейчас всё это разрослось до вебсфер и прочих монстров.

НеофитSQL
А профи, если готовы платить, то им недосуг к чему-то новому привыкать.
я готов привыкать ко всему новому (и хорошему), но цель сейчас - сделать универсально, быстро и удобно. Приоритеты именно в таком порядке. И забыть про это Картинка с другого сайта. есть ещё куча интересных дел, которыми охота заняться
3 ноя 20, 06:42    [22225452]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 760
CEMb,

RPC есть для всех платформ.

Решили делать только через браузер?
Нет проблем.

Вы будете поддерживать SSL/TLS? Какие версии?
Минимальная/максимальная длина ключа?
Http 1.0 ещё актуален? Или 1.1 хватит?
Максимальное число клиентов?
Защита от DOS атак?
Как загружать SSL сертификат?
На каком порту слушать?
Можно сделать субсайтом уже существующего сайта?
Какой план распространять патчи (не ваши, веб серверские)
Как конфигурировать все это?
Юзеры и группы, с разными правами?
Единый логин? (Интеграция с керберос?)

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

Вариант: сделать RPC API, и простой веб сервер использующий ваш RPC. Сервер послужит демонстратор ос фич, а за ним будет твердый API для серьезных пользователей.
3 ноя 20, 08:26    [22225462]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
CEMb
RPC же под Линупсом есть?
UNIX сигналы для межпроцессного взаимодействия.
Или
DBus
3 ноя 20, 08:43    [22225469]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
CEMb
Линупс, там нет сервисов
они просто называются другим словом - демоны.

CEMb
RPC мне нравится

Есть удаленный по сети и есть удаленный на той же машине но в другом процессе (Unix стиль)
Вам какой? Или всё сразу?
Тут верно написали про кажущуюся простоту веб сервиса на 80 порту.
Там вагон новых вопросов Веб проекта в отличии от Десктоп проекта.
Имхо
3 ноя 20, 11:04    [22225543]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
CEMb
Member

Откуда: Столько
Сообщений: 2129
НеофитSQL, PetroNotC Sharp, погодити-погодити :)

Мне пока надо совсем просто: зайти браузером в localhost:port/app и получить страничку с настройками от приложения. У меня сейчас рабочее приложение, которое наружу никак не торчит,но работает запускает процессы, следит за ними, ещё что-то делает. Не хочу делать GUI, не хочу делать набор команд для консоли. Хочу web-UI, сервлеты, чтоб получил post, собрал страницу и отправил. Такое можно сделать?
В идеале хочу ещё сам с сервера обновлять страницу, как некоторые делают, но это вообще не обязательно.
Клиент один, групп нет, конфигируровать не надо, DDoS атак не будет.
3 ноя 20, 19:25    [22225933]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

CEMb
Такое можно сделать?

Можно, конечно. А осилишь?..

Posted via ActualForum NNTP Server 1.5

3 ноя 20, 19:35    [22225940]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
CEMb,
Можно)))))
- создай топик Ищу код минимального веб сервера.
- создай топик Ищу пример минимальной веб странички (в js ветке)
Ну и т.д.
3 ноя 20, 19:47    [22225945]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
CEMb
Member

Откуда: Столько
Сообщений: 2129
Dimitry Sibiryakov
Можно, конечно. А осилишь?..
Да
PetroNotC Sharp
создай топик Ищу код минимального веб сервера.
Смишно

Ладно, всем спасибо, я нашёл небольшой сервер на плюсах
3 ноя 20, 20:01    [22225958]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
CEMb
я нашёл небольшой сервер на плюсах
ну вот.
У прогеров любимая поговорка - Слона надо есть по частям.
3 ноя 20, 22:11    [22226012]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
mayton
Member

Откуда: loopback
Сообщений: 49762
У веб-серверов есть недостаток. Их очень легко "валить". Просто открыв несколько страничек браузера
и нажимая F5 можно создать таки проблемы. Поэтому уж если брать встраиваемый то он должен быть
такой-же непробиваемый как nginx или лучше не брать ничего. Старые веб-консоли роутеров Dlink/TpLink
были такие уродские в своей слабости что их даже валить не надо было. Они валились и зависали
от простых хождений по менюшкам.

Вобщем у любого http-клиента не то чтобы слабый контракт - а скорее полное его отсутствие. И надо
хоть как-то защищаться.
3 ноя 20, 22:23    [22226022]     Ответить | Цитировать Сообщить модератору
 Re: Архитектура для black box.  [new]
НеофитSQL
Member [заблокирован]

Откуда: Маями
Сообщений: 760
CEMb
НеофитSQL, PetroNotC Sharp, погодити-погодити :)

Мне пока надо совсем просто: зайти браузером в localhost:port/app и получить страничку с настройками от приложения. У меня сейчас рабочее приложение, которое наружу никак не торчит,но работает запускает процессы, следит за ними, ещё что-то делает. Не хочу делать GUI, не хочу делать набор команд для консоли. Хочу web-UI, сервлеты, чтоб получил post, собрал страницу и отправил. Такое можно сделать?
В идеале хочу ещё сам с сервера обновлять страницу, как некоторые делают, но это вообще не обязательно.
Клиент один, групп нет, конфигируровать не надо, DDoS атак не будет.


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

Самое быстрое - конфиг в текстовом файле.
Издалека расшарил кому надо, сервис замечает если файл изменился.
3 ноя 20, 22:57    [22226044]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / C++ Ответить