RSocket

All lectures for UZ purposes
Daraja, Dars
Mavjud

RSocket – bu TCP, WebSocket va boshqa bayt oqimni uzatish mexanizmlari orqali multipelksiyalangan dupleks aloqa uchun ishlatiladigan dasturiy protokoldir, quyidagi o'zaro aloqalardan birini ishlatadi:

  • Request-Response – bitta xabar yuborish va javobda bitta qabul qilish.

  • Request-Stream – bitta xabar yuborish va javobda xabar oqimi qabul qilish.

  • Channel – xabar oqimlarini har ikki tomonga uzatish.

  • Fire-and-Forget– bir tomonlama xabar yuborish.

Dastlabki ulanish o'rnatilgach, "mijoz" va "server" o'rtasidagi farq yo'qoladi, chunki har ikkala tomon simmetrik bo'lib qoladi va har bir tomon yuqorida ko'rsatilgan o'zaro aloqalardan birini boshlashi mumkin. Shu sababli protokolda ishtirok etuvchi tomonlar "so'rovchi" va "javobchi" deb nomlanadi, va yuqoridagi o'zaro aloqalar "so'rov oqimlari" yoki oddiygina "so'rovlar" deb nomlanadi.

RSocket protokolining asosiy xususiyatlari va afzalliklari quyidagilardir:

  • Reactive Streams semantikasi tarmoq chegarasida – Request-Stream va Channel kabi oqim so'rovlari uchun, javob signalari so'rovchi va javobchi o'rtasida o'tadi, so'rovchiga manbada javobchini sekinlashtirish imkonini beradi, bu tarmoq darajasidagi ortiqcha yukni nazorat qilishdan qaramlikni kamaytiradi va har qanday boshqa darajada bufferlash zaruriyatini pasaytiradi.

  • Regulyatsiya (so'rovlarni bo'g'ish) – bu funksiya "Leasing (cheklangan foydalanish)" nomi bilan bir tomon tomonidan boshqa tomon tomonidan ruxsat etilgan umumiy so'rovlar sonini cheklash uchun yuborilishi mumkin bo'lgan LEASE freymi nomi bilan atalgan. Cheklangan foydalanish davrlari muntazam ravishda uzaytiriladi.

  • Sessiyani qayta tiklash – aloqa yo'qolishi holatlariga mo'ljallangan va aniqlangan holatni saqlashni talab qiladi. Ilovalar uchun holatni boshqarish shaffof tarzda tashkil qilingan va iloji boricha yetkazib beruvchi to'xtatilishi mumkin bo'lgan holatni to'xtatib, zarur bo'lgan holat hajmini kamaytirish bilan yaxshi ishlaydi.

  • Katta xabarlarni fragmentatsiya qilish va qayta yig'ish.

  • Keepalive (yurak urish xabarlari).

RSocketda bir nechta tillarda amalga oshirilishi mavjud. Java kutubxonasi Project Reactor asosida yaratilgan va uzatish uchun Reactor Netty ishlatiladi. Bu degani, Reactive Streams'dagi sizning ilovangizda pablisherlardan kelgan signal RSocket orqali tarmoq bo'ylab shaffof tarqaladi.

Protokol

RSocketning afzalliklaridan biri shundaki, u "uchuvchan" va o'qilishi qulay spetsifikatsiyaga ega, shuningdek protokolning ba'zi kengaytmalari. Shuning uchun, tilning amalga oshirilishidan va yuqori darajadagi framework API'laridan qat'i nazar, spetsifikatsiyani o'qish o'rinli bo'ladi. Bu bo'limda ma'lum kontekstni yaratishning qisqa tavsifi keltirilgan.

Ulash

Avvaliga, mijoz TCP yoki WebSocket kabi past darajadagi oqim uzatish vositasi orqali serverga ulanadi va SETUP freymni serverga ulanish parametrlarini o'rnatish uchun yuboradi.

Server SETUP freymni rad etishi mumkin, lekin odatda u jo'natilgandan so'ng (mijoz uchun) va qabul qilingach (server uchun) har ikkala tomon so'rovlarni yuborishni boshlashi mumkin, agar SETUP freym cheklangan foydalanish semantikasini ko'rsatmasa, bunda har ikkala tomon boshqa tomondan LEASE freymni kutishi kerak.

So'rovlarni bajarish

Ulanish o'rnatilgach, har ikkala tomon REQUEST_RESPONSE, REQUEST_STREAM, REQUEST_CHANNEL yoki REQUEST_FNF freymidan biri orqali so'rovni boshlashi mumkin. Ushbu freymlarning har biri so'rovchidan javobchiga bitta xabarni tashiydi.

Javobchi keyin PAYLOAD freymlari bilan javob xabarlarini qaytarishi mumkin, va REQUEST_CHANNEL holatida so'rovchi ham qo'shimcha so'rov xabarlari bilan PAYLOAD freymlarini yuborishi mumkin.

Agar so'rov xabar oqimini o'z ichiga olsa, masalan Request-Stream va Channel, javobchi so'rovchining so'rov signallariga rioya qilishi shart. So'rov xabarlar sonida ifodalanadi. Dastlabki so'rov REQUEST_STREAM va REQUEST_CHANNEL freymlarida ko'rsatiladi. Keyingi so'rovlar REQUEST_N freymlari orqali izohlanadi.

Har bir tomon shuningdek, alohida so'rovlarga emas, balki butun ulanishga tegishli bo'lgan metadata haqidagi xabarlarni METADATA_PUSH freym orqali yuborishi mumkin.

Xabar formati

RSocket xabarlari ma'lumot va metama'lumotga ega. Metama'lumotlar yo'nalish, xavfsizlik tokeni va boshqalarni uzatish uchun ishlatilishi mumkin. Ma'lumot va metama'lumotlar har xil formatda bo'lishi mumkin. Ularning MIME turlari SETUP freymda e'lon qilinadi va o'sha ulanishdagi barcha so'rovlarga tatbiq etiladi.

Hamma xabarlar metama'lumotni o'z ichiga olishi mumkin bo'lsa ham, odatda metama'lumotlar, masalan, yo'nalish, har bir so'rovda taqdim etiladi va shuning uchun faqat birinchi so'rov xabarida, ya'ni REQUEST_RESPONSE, REQUEST_STREAM, REQUEST_CHANNEL yoki REQUEST_FNF freymlaridan birida kiritiladi.

Protokol kengaytmalari ilovalarda ishlatish uchun keng formatdagi metama'lumotlarni aniqlaydi:

Java Umsetzung

Java-implementatsiya RSocket uchun Project Reactor asosida qurilgan. TCP va WebSocket uchun uzatish mexanizmlari Reactor Netty asosida qurilgan. Reactive Streams kutubxonasi bo'lgan Reactor protokolni amalga oshirish ishini soddalashtiradi. Ilovalarda Flux va Mono yordamida deklarativ operatorlar va shaffof javob signallari yordamida ishlash tabiiy hisoblanadi.

RSocket uchun Java'da API ataylab soddalashtirilgan va asosiydir. Bunda protokolning xususiyatlariga va amaliy dasturlash modelini saqlashga (masalan, RPC uchun kod generatori va boshqalar bilan solishtirganda) alohida e'tibor qaratilgan.

io.rsocket.RSocket asosiy kontrakti to'rtta so'rov o'zaro aloqalar turini modellashtiradi, Mono bitta xabar va'dasini, Flux xabarlar oqimini, va io.rsocket.Payload ma'lumot va metama'lumotlarga bayt buferlari shaklida kirishni o'z ichiga oladi. RSocket kontrakti simmetrik ravishda ishlatiladi. So'rovlarni yuborish qismida ilovaga so'rovlarni bajarish uchun RSocket beriladi. Javoblarni yuborish qismida ilova so'rovlarni qayta ishlash uchun RSocketni amalga oshiradi.

Bu tavsif to'liq kirish emas. Ko'p holatlarda Spring ilovalari bevosita uning API'sini ishlatmadi. Biroq, RSocket'ni Spring'dan alohida ko'rish yoki tajriba qilish muhim bo'lishi mumkin. RSocket uchun Java repository'si API va protokol imkoniyatlarini namoyish etuvchi bir qator ilova misollarini o'z ichiga oladi.

Spring'da qo'llab-quvvatlash vositalari

spring-messaging moduli quyidagilarni o'z ichiga oladi:

  • RSocketRequester – io.rsocket.RSocket orqali so'rovlarni amalga oshirish uchun kodlash/dekodlash ma'lumotlari va metama'lumotlari bilan ishlaydigan oqim API.

  • Annotatsiyalangan javobchilar – @MessageMapping annotatsiyalangan metodlar javobni yuborish uchun.

spring-web moduli RSocket ilovalari ehtiyojiga mos Encoder va Decoder implementatsiyalarini, masalan, Jackson CBOR/JSON va Protobufni o'z ichiga oladi. U shuningdek, yo'nalishni samarali moslashtirish uchun ulanishi mumkin bo'lgan PathPatternParserni ham o'z ichiga oladi.

Spring Boot 2.2 TCP yoki WebSocket orqali RSocket server yaratishni qo'llab-quvvatlaydi, WebFlux serverida WebSocket orqali RSocket ishlatish imkoniyatini o'z ichiga oladi. Shuningdek, RSocketRequester.Builder va RSocketStrategies uchun mijoz qo'llab-quvvatlashi va avtomatik konfiguratsiyasi mavjud. To'liq ma'lumot uchun RSocket bo'limini Spring Boot qo'llanmasida ko'ring.

Spring Security 5.2 RSocket qo'llab-quvvatlashni beradi.

Spring Integration 5.2 RSocket mijozlar va serverlar bilan o'zaro aloqalar uchun kirish va chiqish shlyuzlarini tatbiq etadi. To'liq ma'lumot uchun Spring Integration Reference Manual qo'llanmasini ko'ring.

Spring Cloud Gateway RSocket asosida ulanishlarni qo'llab-quvvatlaydi.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION