Простейший вебсокет-сервер
Apr. 22nd, 2016 05:11 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Я решил набросать веб-морду для управления ИК-спектрометром IRBIS, для чего опять понадобилось прикручивать вебсокеты. И опять пришлось ковыряться в предыдущем коде (веб-морда для простой управлялки на raspberry Pi). Чтобы впредь не нужно было заниматься чисткой кода, я решил сделать минимальный пример, позволяющий общаться через очередь сообщений: код на гитхабе.
Так как вебсокеты у меня используются лишь для управления железяками, т.е. всегда нужен блокирующий доступ, я в этот пример добавил блокиратор левых подключений.
При подключении клиента ему каждую секунду передается текущее время, а клиент может отослать серверу сообщение, введенное в текстовое поле. Таким образом, легко можно будет использовать этот каркас в разных управлялках.
Остается теперь придумать метод авторизации/аутентификации. Простейшее, что приходит в голову — при соединении сервер отсылает "соль", клиент шифрует введенный пароль этой "солью" и отсылает серверу. А тот проверяет, все ли ОК.
Нужно лишь найти вменяемые MD5 или SHA на жабоскрипте.
P.S. Полдня убил на верстку базы веб-морды! Совсем уже этот HTML забыл. Пытался верстать блоками, но ничего не вышло. Решил по-старому — вложенными таблицами.
Так как вебсокеты у меня используются лишь для управления железяками, т.е. всегда нужен блокирующий доступ, я в этот пример добавил блокиратор левых подключений.
При подключении клиента ему каждую секунду передается текущее время, а клиент может отослать серверу сообщение, введенное в текстовое поле. Таким образом, легко можно будет использовать этот каркас в разных управлялках.
Остается теперь придумать метод авторизации/аутентификации. Простейшее, что приходит в голову — при соединении сервер отсылает "соль", клиент шифрует введенный пароль этой "солью" и отсылает серверу. А тот проверяет, все ли ОК.
Нужно лишь найти вменяемые MD5 или SHA на жабоскрипте.
P.S. Полдня убил на верстку базы веб-морды! Совсем уже этот HTML забыл. Пытался верстать блоками, но ничего не вышло. Решил по-старому — вложенными таблицами.
no subject
Date: 2016-04-22 11:19 pm (UTC)не-не,
[div style="display: table"]
[div style="display: table-row"]
[div style="display: table-cell"]
я в ячейге
[/div]
[/div]
[/div]
no subject
Date: 2016-04-23 04:27 pm (UTC)no subject
Date: 2016-04-23 10:16 pm (UTC)no subject
Date: 2016-04-24 09:37 am (UTC)no subject
Date: 2016-04-24 12:35 pm (UTC)no subject
Date: 2016-04-24 02:49 pm (UTC)// кстати, когда я первую систему старт-финиш делал для даунхилла, для упрощения кросс-платформенности сделал ее эмулятором клавиатуры. Воткнул в планшет — вуаля!
no subject
Date: 2016-04-24 04:15 pm (UTC)А то так, упрощая, можно и до консоли дойти, браго ssh даже на телефоне есть :)
no subject
Date: 2016-04-25 05:29 am (UTC)> так, упрощая, можно и до консоли дойти
Не было бы нужды для стороннего народа делать, консольные клиенты и оставил бы. У меня подавляющее большинство велосипедов консольное, т.к. гуи там нафиг не втарахтелся!
> ssh даже на телефоне есть
Скажи это моему "бабушкофону" ☺
no subject
Date: 2016-04-25 09:23 am (UTC)на бабушкофоне будет проблема и с браузером :)
no subject
Date: 2016-04-25 10:49 am (UTC)no subject
Date: 2016-04-23 10:13 pm (UTC)Не проще взять какой-нить яваскриптовый движок, и просто отдавать данные рестом? Заодно бонусом будут всякие шкурки-темы ...
no subject
Date: 2016-04-24 09:41 am (UTC)Но в случае с вебсокетами можно в принципе и не запускать никаких серверов, если только одну-единственную веб-страницу нужно отдавать и никаких CGI.
Жабоскрипт терпеть не могу. И уж тем паче - на стороне сервера. Кроме С я никаких ЯП не признаю. Да и смысл что-то переделывать, если нормально работает?
Как сделать авторизацию, я уже придумал. В интернете полно всяких жабоскриптовых библиотек для MD5, SHA и т.п. Просто буду передавать в момент первого подключения "соль", браузер юзера будет вычислять хэш введенного пароля с этой солью и передавать при соединении вебсокет-серверу. Можно в куках или локалсторидже запоминать этот хэш на время сессии, чтобы пока вебсокет-сервер не перезапустили, можно было спокойно коннектиться, не вводя пароля.
В понедельник или вторник попробую все это добавить в пример.
no subject
Date: 2016-04-24 12:33 pm (UTC)Я предлагаю как раз на клиентской стороне. Пишется заметно быстрее, чем на html хардкодить. И передавать потом только данные.
no subject
Date: 2016-04-24 02:44 pm (UTC)А на собственно код уходит не так уж и много: надо-то просто парсер протокола передачи данных написать и связать с всякими индикаторами и прочей фигней.
Изучать чужие жабоскриптовые библиотеки чаще всего значит намного затянуть написание велосипеда.
Кстати, после того, как вебсокеты стали более-менее нормально во всех браузерах работать, я послал лесом долбаные асинхронные запросы в случае, когда их часто надо делать! Нафиг по 10 раз в секунду CGI запускать для проверки статуса, если все решается куда проще на вебсокетах?
Вызов CGI остался лишь там, где от силы запрос в секунду (а то и 1 раз в минуту).
no subject
Date: 2016-04-24 04:13 pm (UTC)Старт будет чуть дольше, но зато потом все будет достаточно быстро, да и примеров часто достаточно.
no subject
Date: 2016-04-25 01:28 am (UTC)