Состояние RSocket в JavaScript

RSocket - это захватывающее новое достижение в области прикладных протоколов с достойным внедрением и поддержкой в ​​экосистеме Java, во многом благодаря вкладу в реализацию Java от таких компаний, как Pivotal, и достойной поддержке RSocket в популярной среде Spring. Что касается JavaScript, RSocket не набрал такого же уровня популярности, принятия или инвестиций, как другие протоколы, такие как GraphQL.

Жесткая конкуренция

Давайте сравним популярность RSocket в поиске с GraphQL, чтобы оценить популярность каждого протокола.

На графике ниже мы видим, что популярность RSocket в поисковой сети начала набирать обороты только в конце 2018 года.

Напротив, GraphQL испытал гораздо более резкий рост популярности поиска, начиная с 2016 года.

Проведение параллелей

Если мы проведем параллель между популярностью поиска и внедрением в отрасли, RSocket еще не испытал такого же роста популярности поиска, как GraphQL, что означает, что он не достиг такого же уровня распространения.

GraphQL красным цветом. RSocket синим цветом.

Популярность и принятие

Популярность GraphQL можно легко внести в его концепцию в Facebook, а вклады Facebook с открытым исходным кодом имеют высокую видимость в пространстве JavaScript. Кроме того, инвестиции в экосистему GraphQL со стороны таких стартапов, как Apollo GraphQL, принесли дивиденды в популяризацию GraphQL. Если бы RSocket завоевал популярность среди крупных корпоративных компаний, а также среди заинтересованной аудитории разработчиков JavaScript, я считаю, что это могло бы помочь RSocket испытать такое же распространение.

В JavaScript большинство разработчиков привыкли использовать пакеты с открытым исходным кодом для решения широкого круга общих проблем, и сейчас лучшее время, чтобы не изобретать колесо. Однако, поскольку существует только одна эталонная реализация RSocket и нет хорошо зарекомендовавших себя вспомогательных библиотек, если вы рассчитываете, что сможете npm install ваш путь к победе, у вас будут плохие времена с RSocket.

Поддержка RSocket в JavaScript

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

rsocket-js

Rsocket-js - это основная эталонная реализация RSocket для JavaScript. Библиотека предоставляет низкоуровневые базовые реализации для нескольких транспортов, а также реализацию Реактивных потоков.

При создании приложения разработчики обнаружат, что гораздо практичнее использовать библиотеку абстракций, такую ​​как rsokcet-rpc-js, а не напрямую использовать rsocket-js. Однако авторы библиотек, скорее всего, потратят большую часть своего времени на непосредственное взаимодействие с rsocket-js.

На первый взгляд может быть сложно определить основных разработчиков rsocket-js. В последнее время вклады в основном поступали от инженеров, которые, похоже, не связаны с Facebook, однако некоторые лицензии в репозитории ссылаются на Facebook, и ожидается, что новые участники проекта примут соглашение Facebook OSS. Исходя из этого, похоже, что Facebook не может играть ведущую роль в продолжении разработки библиотек, даже если они изначально выполняли загрузку и запускали библиотеку. Также важно отметить, что проект получил различный уровень участия от инженеров таких компаний, как Pivotal и Netifi, а также от участников сообщества разработчиков ПО с открытым исходным кодом.

Реализация RSocket для Java на Java (rsocket-java) получила значительный и постоянный вклад от инженеров известных компаний, таких как Netflix и Pivotal. Эти инвестиции лидеров в области Java OSS дают потребителям rsocket-java определенную уверенность в том, что у проекта впереди долгая жизнь, и поэтому они могут чувствовать себя более комфортно, делая ставку на свой проект и, возможно, на свой бизнес. технологии. Напротив, неясно, имеет ли rsocket-js четкий набор основных специалистов по сопровождению, определенную дорожную карту или используется ли он какими-либо крупными компаниями.

rsocket-rpc-js

rsocket-rpc-js - это библиотека абстракции, которая использует rsocket-js, и с практической точки зрения, вероятно, это интерфейс, который большинство приложений или разработчиков будут использовать при работе с RSocket в JavaScript.

rsocket-rpc-js - Стандартная реализация RPC для RSocket в JavaScript.

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

Реализации клиентов и серверов в стиле RPC обычно придерживаются мнения об интерфейсах, которые они предоставляют, и о том, как сообщения оформляются / форматируются.

В отличие от спокойного API, где потребитель запрашивает ресурс пользователя, вызывая HTTP-запрос GET к /users/1, где 1 - это идентификатор пользователя, в RPC API более распространено вызывать HTTP-запрос POST к /UserService/GetUserById и включать его в запрос. body идентификатор пользователя { "userId": 1 }. rsocket-rpc-js поддерживает эти типы шаблонов и интерфейсов RPC. Метод, следующий этому шаблону, может иметь подпись, подобную следующей: getUserById(Number: id): Single<User>.

Мнения API и спецификации расширяют возможности создания инструментов, которые дополнительно стандартизируют интеграцию, не требуя от разработчиков работы над новыми идеями, которые создают их собственные уникальные проблемы. Например, поскольку rsocket-rpc-js и другие реализации RSocket RPC следуют установленной спецификации, можно сгенерировать исходный код для клиентов, серверов и полезных данных сообщений на нескольких языках, используя общие инструменты и форматы обмена, такие как протоколы и протоколы. protobuf.

Пример использования сгенерированной клиентской службы, созданной протоколом, в сочетании с плагином rsocket-rpc-protobuf protoc будет аналогичен приведенному ниже:

В приведенном выше примере была реализована служба, которая предоставляет метод, использующий поток Запрос-ответ (просмотрите список потоков на веб-сайте rsocket.io), и эта реализация helloServiceClient может быть сгенерирована протоколом при задании определение protobuf, такое как:

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

розеточный

Rsocket-flowable обеспечивает реализацию реактивных потоков в JavaScript и глубоко укоренился как в rsocket-js, так и в rsocket-rpc-js. Изучение API-интерфейса rsocket-flowable и того, что это значит для работы с реактивными библиотеками и парадигмами, будет иметь первостепенное значение для успешной работы с rsocket-js и rsocket-rpc-js.

Если вы знакомы с RxJS, то rsocket-flowable, вероятно, покажется вам знакомым. Если вы не знакомы с RxJS или парадигмами реактивного программирования, вы можете столкнуться с довольно крутой кривой обучения.

Чего ожидать дальше

Хотя основная часть текущей разработки, по-видимому, сосредоточена вокруг реализаций RSocket на Java и C ++, я надеюсь, что реализация JavaScript продолжит получать обновления и дополнения, чтобы соответствовать полной спецификации RSocket, но только время покажет.

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

Напишите мне комментарий ниже или напишите в Твиттере и дайте мне знать, впервые ли вы слышите о RSocket или вы, как и я, внимательно следите за его развитием.

Первоначально опубликовано на https://viglucci.io/the-state-of-rsocket-in-javascript .