Как стать автором
Обновить

Комментарии 13

RPC — remote procedure call. В идеале из js должны вызываться асинхронные функции, которые под капотом будут вызваны на сервере, без дополнительных действий со стороны прикладного кода.
Такая реализация есть к примеру тут:
https://github.com/metarhia/jstp


Сам по себе socket.io как раз содержит всевозможные fallbacks, поэтому перестали использовать его пару лет назад, перейдя на JSTP/Firebase (он под капотом тоже работает на ws)

Автор проекта metarhia позиционирует проект как экспериментальный. То есть скорее для обкатки новых идей и исследований. В не например не реализована масштабируемость. Масштабируемость это уже в проекте той же группы сервере impress.
А что такое JSTP/Firebase. Поиск в google не даёт выдачу по этой фразе?

Да, но сам jstp можно использовать и без impress.
Firebase — https://firebase.google.com/docs/firestore вот такая штука, это не RPC, т.к. оно прикленно к данным, но с ним идут Firebase Functions, которые умеют вызваться по событиям возникающим в FireStore https://firebase.google.com/docs/firestore/extend-with-function.
Подход с firestore и тригерами мы используем в сервисе верификации емейлов http://mailcheck.co — но там для ускорения разработки использован еще и firebase auth и вообще все что только можно готовое.
Но Impress мы тоже использовалеи, чуть ранее на другом проекте Nodex, но увы его постигла участь многих блокчейн проетов, поэтому пощупать на нем JSTP в лайве сейчас не выйдет. Но мы были очень довольны скоростью и удобством разработки приложений для Impress, хотя как раз функционал масштабирования нам не пригодился на этом проекте.

А вы используете typescript или javascript с JSTP?

фронт на Angular, поэтому использовали typescript

Ну зачем в 2019м году создавать новую библиотеку на колбеках?


Почему бы вместо сигнатуры (socket, payload, callback) -> void не использовать (socket, payload) -> Promise? Вы же сами написали всем функциям зачем-то async. Почему не пошли дальше и не заменили return callback(...) на return ...?

В данном случае callback это то что приходит от socket.io. преобразовывать в промис мне показалось излишнем. На фронтенде да промис как мне кажется был уместен.

Функциям прописан async просто осталось случайно от реального кода где идёт await на обращение к базе данных. Сейчас уберу.

А зачем в таком случае вообще нужна ваша библиотека? Кажется, у socket.io уже есть все необходимое...

Я не разрабатывал библиотеку. Я описал возможность применения socket.io для удаленного вызова процедур и конкретно в связке с библиотекой react-admin. В связи с этим на фронте я написал провайдер который просто передает объект на сервер. А вот на сервере для реализации ответа пришлось поработать немного больше, написав код роутера. Но это не составляет основу сообщения. Основа это 1) статистика по доступности технологии 2)описание проблем которые нужно решить это разрыв соединения, инфраструктура и масштабируемость и 3) решение посредством библиотеки socket.io.
Тот кто захочет использовать такую связку скорее всего столкнется как и я с необходимостью структурировать код. Я решил эту проблему разработкой роутера. У кого то возникнут другие идеи. В всяком случае это не большая задача и может быть легко разработана и протестирвана. В отличии от других задач возникающих при разработки библиотек работающих с веб-сокетами
Посмотрите ещё на WAMP.
Спасибо. Интересный протокол. Я его правда уже смотрел и не представляю его архитектуру и возможность использовать в своих приложениях. Но вцелом я придерживаюсь того мнения что в приложении необходимо опираться на хорошо продуманные протоколы, в то время как веб-сокеты это просто транспорт. В следующем сообщении я как раз планировал рассмотреть протокол MQTT
Вторая страшилка, про бан на websocket со стороны провайдеров или админов корпоративных сетей — также необоснованный, так как сейчас все используют протокол https, и понять что открыто соединение websocket (не взломав https) невозможно.

Есть основания. Правда, этот способ обрубает почти все, кроме https. Сам встречал такое, что обрывается любое tcp-соединение, которое длится больше минуты.
Разрыв по времени это не проблема т.к. основные библиотеки поддерживают автоматическое пересоединение в случае разъединения. Если конечно не забанить реально весь трафик с ip адреса
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории