LINUX.ORG.RU

На чем написать клиент/сервер

 ,


0

3

Приветствую. Обрисую примерную задачу: планируется отправлять покупателям девайс (ну если дойдет до этого, конечно), сердце которового - МК. Есть веб приложуха для телефона.

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

Вопросы:

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

  2. Веб приложения - вообще для меня неизвестное. Подозреваю, что раз клиент имеет управление девайсом в режиме нон-стоп (ну тот же счетчик инкрементить), то там должно быть обмазано джаваскриптом каким-нибудь. В общем - как проще/дешевле по ресурсам/на чем реализовать подобный клиент-сервер? По МК, думаю, каких-то проблем быть не должно (тупо отдать данные и открыть сокет для общения с приложением), а вот на чем сейчас просто написать клиент подходящий для меня под все виды мобилок? Смущают только динамические элементы, хочется спихнуть все задачи по формированию страницы клиенту (ну не на МК же это делать) и открыть сокет для общения с девайсом

PS: хочется написать клиент максимально просто (при сохранении необходимого функционала), а не какое-нибудь rocket science хай энд веб дерьмо с полным комплектом свистелок написанного на монструозном фреймворке



Последнее исправление: kvpfs_2 (всего исправлений: 2)

Хорошо, что тему про bluetooth подняли, я стал всё болье склоняться к нему вместо вафли, но выходит что и с ним проблемы. Время не потратил на реализация (пока занимаюсь не девайсом).

А есть ли вариант сделать запрос на DHCP сервер? Ну т.е. не из вебни, а из своего девайса, т.е. доступно что угодно. Можно ли взять у него адрес из своего пула адресов? Например я выбрал 10 адресов в каждой потенциально возможно подсети, и договариваюсь с DHCP о выдаче мне одного из них (чтобы он его никому больше не выдал). Это снизит количество http запросов из веб приложения при поиске девайса

kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

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

https://jlc3dp.com/3d-printing-quote - не знаю, как там нонче с заказами из рахи, но ценники такие, что в собственном принтере смысл отпадает. Они даже черным нейлоном печатать умеют. Дороха, но для мелочи норм.

Может быть смысл для прототипирования взять SLA принтер, чтобы быстро проверять что нарисовал. Хотя это тоже фиксится курьерской доставкой. Все зависит от того, какие у тебя потребности и обстоятельства.

В принципе можно на домашнем SLA и для продакшена попечатать, если смолы вроде M66 (не помню точно) брать. Просто стенки будут толще, к ультрафиолету не устойчиво, более колкое и т.п.

Vit ★★★★★
()
Ответ на: комментарий от Jurik_Phys

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

kvpfs_2
() автор топика
Ответ на: комментарий от Vit

Спс, гляну для оценки, будет на что ориентироваться если захочу кому-то делегировать корпуса. Ну а так на алике нашел более менее пригодное, комбо из двух корпусов - один с питанием, другой с мозгами. Конечно это не свой корпус со всеми хотелками и эргономикой, но хоть что-то

kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

Если ты так хочешь вафлю, тебе понадобится сделать captive portal. Т.е. режим, когда он выставляет свою собственную точку доступа (например по долгому нажатию кнопки), на которую коннектишься мобилкой и далее заходишь браузером. Там уже можешь задать, как девайс в местную сетку воткнуть, и еще что-то одноразовое подкрутить, что в обычной работе меняться никогда не будет. Если хочешь вебню - забей на попытки сетку ковырять. Это не взлетит, «сейчас так не носят». Просто через отдельную временную точку доступа конфигури, как дидами заведено.

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

Vit ★★★★★
()
Последнее исправление: Vit (всего исправлений: 2)
Ответ на: комментарий от Vit

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

Для конфига девайса юзером я так и сделаю, спс. Но для веб приложения это неподойдет, там другой сценарий использования. Юзер веб приложения о девайсе вообще ничего не знает, он только сканит QR код, через который он должен получить свой уникальный ID. И тут я вижу 3 вариант - 1. вшить инфу в каждый QR код (чего не хочется, это хлопотно). 2. Либо как-то достать её с девайса кодом из веб приложения. 3. Наисать полноценное приложение для телефона и получить полноценный доступ в локальную сеть. Пердолинг со сторами - не хочется

Похоже, что всё же придется прибегнуть к 1 варианту и делать уникальный пары девайс/сопотствующие материалы

kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

Ты как-то в очень низкоуровневые подробности сходу спускаешься. Не очень понятно, для чего это. Можешь попробовать как-то иначе сформулировать, какую инфу куда ты пытаешься передать и зачем? Данные + сценарии использования. Исходя из этого можно будет определиться, где юзер в каптив портал входит, а где QR сканирует. А то подгонять архитектуру под QR код можно до бесконечности, и не факт что получится.

Vit ★★★★★
()

я для похожих и больших целей юзаю tinc, (это может избыточно получать доступ абслютно везде). А по теме: «поиск машинки в локальной сети», попробуй Zeroconf, у меня со всеми роутерами (6 шт. сменил работает).

s-warus ★★★
()
Ответ на: комментарий от Vit

Эта такая группавая игра. Кто-то заказывает девайс и получает аккаунт на сайте, этот человек войдет на девайс как на точку доступа и задаст настройки сети (имя вафли, пароль). Другие члены группы сканят QR (он вшит в фильм) и попадают на раздел сайта, который связан с этим аккаунтом и девайсом. Соответственно нужно как-то связать девайс и сопутствующие материлы, которые содержат QR код для перехода на сайт, общий ID, который либо запрашивать у девайса (что я так и не решил по-нормальному), либо генерить для каждого клиента уникальный фильм (кусок с QR кодом)

kvpfs_2
() автор топика
Ответ на: комментарий от s-warus

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

kvpfs_2
() автор топика
Последнее исправление: kvpfs_2 (всего исправлений: 2)
Ответ на: комментарий от kvpfs_2

А если абстрагироваться от того, как ты привлекаешь юзеров в игру. Девайс в этой игре какую роль выполняет? Например, дает доступ в игре на уровне списка юзеров. Или допустим надо бегать по городу, искать девайсы и чекиниться. Или для локальной игры без интернета, и раз в неделю возить в райцентр для скидывания статистики по модему :). При помощи чего юзеры-то в итоге «играют»? Если мобилкой с браузером, то не до конца понятно зачем аппаратный девайс привинчивать).

Vit ★★★★★
()
Ответ на: комментарий от kvpfs_2

Окей. То есть, залезть на девайс с мобилки надо только 1 раз чтобы его сконфигурить в сетку, и дальше на него с мобилки лазать не надо? Тогда надежнее всего wifi + captive portal, чтобы на любых мобилках работало, и там параметры локальной сетки задать, плюс авторизацию на сервере игры. Bluetooth имеет смысл, если тебе регулярно на девайс лазить.

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

Vit ★★★★★
()
Ответ на: комментарий от Vit

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

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

kvpfs_2
() автор топика
Последнее исправление: kvpfs_2 (всего исправлений: 1)

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

kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

Avahi ты компу имя дал xrenarus и после обращаешься в локалке по адресу: 'http://xrenarus.local'.
tinc или fastvpn или т.п. заюзал нужно на все устройства хоть один сервер с белым ip иметь после первого соединения nat попытаются пробить и могут в дальнейшем без сервера работать, общаешься между устойствами по своей сети, я tor .onion сервак на всякий случай держу можно игдрасиль и i2p задействовать.
Пользовался удачно: fastd, VpnCloud, Tinc, zerotier, tor. Сейчас юзаю Tinc и tor противопоказаний против остального нет.

s-warus ★★★
()
Ответ на: комментарий от kvpfs_2

Давай рассуждать логически. Тебе надо заматчить нового юзера с девайсом. Т.е. либо он сканирует уникальный QR, который налеплен на самом девайсе. Либо он идет на общий сайт, и там вводит OTP из 6 цифр который девайс показал на дисплее.

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

Если, как ты описывал, юзер просто заходит на интернет-сайт по общему QR, там все еще нет идентификатора девайса, и вопрос как его получить в ненавязчивой форме без лишних телодвижений. С большой вероятностью это OTP. Еще теоретически можно с веб-страницы (не уходя), подключиться к камере и QR на девайсе сосканировать. Но это уже получается какая-то странная херня с 2 сканами, не юзер френдли.

Либо начинай привязку с другого конца - сканирования уникального QR на самом девайсе. Теоретически наверное можно и без уникального QR, по геометке, но думать надо, сложнее.

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

Vit ★★★★★
()
Последнее исправление: Vit (всего исправлений: 1)
Ответ на: комментарий от Vit

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

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

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

  • По BLE.
  • WiFi через собственную точку с captive portal.
  • Доступ к локальной сетке, в которой находится девайс.
  • Геометка, где находимся.
  • Фотография местности :).
  • Уникальный QR код на девайсе или ближайшем столбе.
  • OTP код который показывает или проговаривает девайс.

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

Vit ★★★★★
()
Ответ на: комментарий от kvpfs_2

Надо будет генерить уникальный QR кода

Цена устройства критическая? Если нет то QR код можно генерировать и показывать на LCD/E-ink экране, прям ссылку с нужным IP.

V1KT0P ★★
()