eddy_em: (Костерок)
eddy_em ([personal profile] eddy_em) wrote2016-04-22 05:11 pm
Entry tags:

Простейший вебсокет-сервер

Я решил набросать веб-морду для управления ИК-спектрометром IRBIS, для чего опять понадобилось прикручивать вебсокеты. И опять пришлось ковыряться в предыдущем коде (веб-морда для простой управлялки на raspberry Pi). Чтобы впредь не нужно было заниматься чисткой кода, я решил сделать минимальный пример, позволяющий общаться через очередь сообщений: код на гитхабе.

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

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

Остается теперь придумать метод авторизации/аутентификации. Простейшее, что приходит в голову — при соединении сервер отсылает "соль", клиент шифрует введенный пароль этой "солью" и отсылает серверу. А тот проверяет, все ли ОК.
Нужно лишь найти вменяемые MD5 или SHA на жабоскрипте.

P.S. Полдня убил на верстку базы веб-морды! Совсем уже этот HTML забыл. Пытался верстать блоками, но ничего не вышло. Решил по-старому — вложенными таблицами.

[identity profile] eddy-em.livejournal.com 2016-04-24 09:41 am (UTC)(link)
Быстро поднять веб-сервер — это NGINX, и CGI работают...
Но в случае с вебсокетами можно в принципе и не запускать никаких серверов, если только одну-единственную веб-страницу нужно отдавать и никаких CGI.

Жабоскрипт терпеть не могу. И уж тем паче - на стороне сервера. Кроме С я никаких ЯП не признаю. Да и смысл что-то переделывать, если нормально работает?
Как сделать авторизацию, я уже придумал. В интернете полно всяких жабоскриптовых библиотек для MD5, SHA и т.п. Просто буду передавать в момент первого подключения "соль", браузер юзера будет вычислять хэш введенного пароля с этой солью и передавать при соединении вебсокет-серверу. Можно в куках или локалсторидже запоминать этот хэш на время сессии, чтобы пока вебсокет-сервер не перезапустили, можно было спокойно коннектиться, не вводя пароля.

В понедельник или вторник попробую все это добавить в пример.

[identity profile] dimas.livejournal.com 2016-04-24 12:33 pm (UTC)(link)
Не, на бутылке удобнее и быстрее, и сразу получаешь и сервер приложений.

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

[identity profile] eddy-em.livejournal.com 2016-04-24 02:44 pm (UTC)(link)
У меня 99.99% времени занимает расположение div'ов и всяких прочих фиговин. Долбаный CSS!!!

А на собственно код уходит не так уж и много: надо-то просто парсер протокола передачи данных написать и связать с всякими индикаторами и прочей фигней.

Изучать чужие жабоскриптовые библиотеки чаще всего значит намного затянуть написание велосипеда.

Кстати, после того, как вебсокеты стали более-менее нормально во всех браузерах работать, я послал лесом долбаные асинхронные запросы в случае, когда их часто надо делать! Нафиг по 10 раз в секунду CGI запускать для проверки статуса, если все решается куда проще на вебсокетах?
Вызов CGI остался лишь там, где от силы запрос в секунду (а то и 1 раз в минуту).

[identity profile] dimas.livejournal.com 2016-04-24 04:13 pm (UTC)(link)
Так я про что и говорю - взять js-фреймворк, и про про это все можно практически забыть, есть достаточное количество виджетов, чтобы это получить сразу.

Старт будет чуть дольше, но зато потом все будет достаточно быстро, да и примеров часто достаточно.