1. Введение
RSocket — это двоичный протокол связи «точка-точка» и новый протокол уровня 7 для сетевого взаимодействия. Предназначен для использования в распределенных приложениях. В этом смысле RSocket является альтернативой другим протоколам, таким как HTTP. Он основан на спецификации Reactive Streams с асинхронным, двунаправленным обратным давлением, мультиплексированием, повторным подключением при отключении, на основе сообщений и другими функциями. Разработанный такими инженерами, как Facebook, Netifi и Pivotal, он предоставляет реализации на Java, JavaScript, C++ и Kotlin.
2. Фон
Кстати говоря, есть некоторые вопросы, почему вы хотите участвовать в этом соглашении? Программисты настолько наелись, что им приходится что-то новое закидывать? Спецификация Reactive Streams упоминалась выше. Если вы не знакомы с этой спецификацией, вам необходимо составить уроки через https://felord.cn. Это новая реактивная спецификация в области java, и Reactor 3 и RxJava являются реализациями этой спецификации. Вы слышали о webflux и hystrix. Java 9 также вобрала в себя часть сути спецификации. Другими словами, теперь мы можем реализовать отзывчивость при сетевой связи. Важным признаком реактивности является противодавление. При HTTP-соединении сервер получает слишком много запросов и легко перегружается, что в серьезных случаях может привести к простою. Этого можно избежать, выборочно отвечая на запросы посредством обработки обратного давления. Кроме того, протокол http не имеет состояния.Пока есть запрос, действительный или недействительный, или повторяющийся, сервер будет обрабатывать его до тех пор, пока он не будет завершен. Если вы в определенной степени используете реактивность, количество бессмысленных запросов значительно сократится. Иногда нам нужно установить длительное соединение. Это нужно реализовать с помощью Websocket. Если вы используете RSocket, легко установить конвейер между двумя сторонами соединения. Есть много других сценариев, которые здесь не перечислены.
3. Особенности
На самом деле вышеизложенное также объясняет некоторые характеристики RSocket. Вот краткий обзор:
- Независимый от языка двоичный протокол связи
- Асинхронная неблокирующая связь на основе сообщений, высокая производительность
- Реализуйте обработку противодавления сетевой связи и на этой основе выполните управление потоком и восстановление соединения.
- Естественная поддержка двусторонней связи
- Больше подходит для распределенных коммуникационных сценариев
4. Четыре модели взаимодействия RSocket
RSocket определяет четыре модели взаимодействия, чтобы компенсировать недостатки протокола Http:
- Fire-and-Forget: оптимизация запроса/ответа, полезная, когда ответ не требуется, например, при регистрации некритических событий.
- Запрос/ответ: похож на модель запроса/ответа Http, но с преимуществами, которых нет у Http, он асинхронный и мультиплексный.
- Запрос/поток: на один запрос может быть получено несколько ответов. Например, получить список видео, получить товары в каталоге.
- Канал: Эта модель модели обеспечивает двустороннюю связь. В этой модели поток сообщений течет асинхронно в обоих направлениях. например, выдавать delta/diff от сервера к клиенту, когда есть изменение
5. Перспективы
С ростом числа упоминаний об отзывчивости будущее RSocket в области сетевых коммуникаций безгранично. Есть много одобрений от производителей первого уровня, таких как Facebook и Pivotal. Несколько недавних обновлений фреймворка Spring специально поддерживали его. Известная инфраструктура rpc Dubbo также была адаптирована для RSocket начиная с версии 3. В настоящее время RSocket все еще находится в версии-кандидате, а официальной версии пока нет. Относительно мало данных. Также требуется знакомство со спецификацией Reactive Streams. Кривая обучения относительно крутая. Тем не менее, мы получаем некоторые идеи, из которых мы можем извлечь уроки для решения проблемы.
关注公众号:Felordcn,获取更多资讯