15-Mauvzu: Soketdan o'qish
Reja:
1.
Mijoz va server TCP protokoli bilan aloqa
2.
Internet -servis texnologiyalari
3.
Ehtiyotkor sinfdoshlar
Mijoz va server TCP protokoli bilan aloqa o'rnatganda, mijoz so'rovlar so'rovi va so'rovlar
ketma -ketligini massiv sifatida qamrab oladi va keyin bayt qatorini serverga soket orqali yuboradi,
server soket orqali bayt qatorini o'tkazadi, RetroRe ketma -ket REQ ob'ektini so'raydi, ishlov
beradi. ishlov berilgandan so'ng, RESga mos keladigan javoblarni yarating, bayt massivlaridagi
RES moslamalari ketma -ketligiga javob bering, so'ngra mijoz o'z rozetkasini rozetkadan bir
qatorga o'qiydigan soket tuzilishi bilan mijozga yuboring, va keyin javob ob'ektini orqaga
qaytaring.
Aloqa tuzilishi ko'pincha ketma -ketlashtirish jarayonini yashirishi mumkin, biz ko'rib
turganimizdek, yuqoridagi rasm, REQ obyekti so'rovi va REATION EXES RES ob'ekti mijoz va
server o'rtasida ishlaydi.
Balki siz bu jarayon hali juda oddiy, juda yaxshi tushunilgan deb o'ylaysiz, lekin
ko'pchiligingiz tasavvur qila olmagan bir qancha hodisalar. Haqiqiy aloqa jarayoni yuqoridagi
rasmga qaraganda ancha murakkab. Siz so'rashingiz mumkin, biz tushunishimiz kerak, siz uni
to'g'ridan -to'g'ri ishlatmaysizmi?
Ko'p yillik Internet -servis texnologiyalari xizmatlari sohasidagi tajribadan so'ng, men sizga
aytamanki, agar siz asosiy mexanizmni bilmasangiz, nima uchun rozetkada o'qish va yozish ko'p
QIQIlarga ega bo'lishini tushunmaysiz, nima uchun ba'zida blok, ba'zan esa blokirovka qilmaydi,
ba'zida noto'g'ri nima uchun yarim sumka muammosi bor, NIO o'ziga xos, maxsus yangi
texnologiya nima? Men bu savollarni tushunishning asosiy mexanizmini tushunishim kerak.
Ikkinchidan, jarayonning tafsilotlari
Aloqaning asosiy darajasini tushunishni osonlashtirish uchun men animatsiya qildim, u
asosiy tafsilotlarni to'liq qamrab ololmadi, lekin rozetkaning ishlash mexanizmini tushunish
uchun. Bu etarli. Iltimos, o'quvchilarni diqqat bilan kuzatib boring, keyin bu animatsiyani
tushuntiring.
Bizning AQSh foydalanish rozetkasi aslida operatsion tizim yadrosida joylashgan
ma'lumotnoma (ob'ekt identifikatori). Bu soketda ikkita muhim bufer konstruktsiyasi mavjud: biri
bu o'qish buferi, yozish buferi.
Biz mijozlar rozetkasini yozganimizda, ketma -ket chastotali imkoniyat ob'ektining so'rovi
dasturlashtirilganda, asosiy tarmoq modulida yozish buferida baytlar qatorini yadro zonasi
rozetkasiga
ko'chiradigan
alohida
mavzu
bo'ladi. Yozish
bufer
ma'lumotlari
nusxalanmaydi. Tarmoq kartasi uchun uskunalar va uskunalar ma'lumotlarni tarmoq kabeliga
yuboradi, va ba'zi bir muntazam almashtirishlardan so'ng, tarmoq kartasi uchun uskunalar, natijada
serverlarga xizmat qiladi.
Xuddi shunday, Kernel server tarmoq modulida buferni o'qish uchun qabul qilingan
ma'lumotlarni aniqlash uchun alohida oqim ham mavjud. Oxirgi serverni ishlatish jarayoni o'qish
buferidagi ma'lumotlarni foydalanuvchi dasturining xotirasiga, jarayonni bajarish uchun
foydalanuvchi dasturining xotirasiga rozetka orqali ko'chiradi. Keyin mijoz mijozga qayta
ishlangan javob ob'ektini yuborish uchun yuboriladi, u endi batafsil emas.
2.1, blokirovka
Biz yozish uchun bufer maydoni cheklanganligini payqadik, shuning uchun agar dastur
rozetkaga yozilgan bo'lsa, bu joy to'la. To'ldirilgandan so'ng, yozish jarayoni bo'sh joy etarli joyga
ega bo'lguncha bloklanadi. Biroq, Nio (blokirovka qilinmaydigan IO) bor, yozish operatsiyasini
men yozganimcha blokirovka qilib bo'lmaydi, chunki uning oxirida yozilganligini aniqlash kerak,
shuningdek, maxsus kontent dasturi. yozilmagan bo'lsa, keshlanadi, kuzatuv takrorlanadi. Yozish.
Xuddi shunday, biz o'qish buferining tarkibi bo'sh bo'lishi mumkinligini ham
payqadik. Bunday rozetkani o'qish operatsiyasi (odatda sobit uzunlikdagi bayt massivini o'qish)
ham etarli Bufer tarkibini (bayt massivlari bilan to'ldirilgan) olmaguncha blokirovka qiladi. Nio
yordamida siz ko'p o'qishingiz mumkin, blokirovka qilishning hojati yo'q. O'qiganingizdan so'ng,
o'qishni davom ettiring.
2,2
、
akk
Bu rasm rozetkaning barcha jarayonlarini ko'rsatadimi? Shubhasiz, tan olish (ACK) jarayoni
umuman yo'q. Masalan, yozish buferi NICga ko'chirilganda, u o'sha nusxalarning tarkibini darhol
o'chirmaydi va boshqa tomonning ACK kelishini kutadi. Agar tarmoq yaxshi bo'lmasa, ACK
kechikadi va yozish buferi to'la bo'ladi.
2.3, Baotou
Ehtiyotkor sinfdoshlar, rasmdagi xabar "Kapital Reqdagi Nic Time" da nusxaga aylanganini
payqashlari mumkin, nega? Chunki ikkalasi bir xil emas. Yadro tarmoq moduli bufer xabarlarini
bloklaydi; agar bufer juda katta bo'lsa, u bir nechta alohida kichik xabarlarga
bo'linadi. Shuningdek, har bir xabar paketiga, masalan, tarmoq manzilining manbasi va maqsadli
tarmoq kartasining manzili, seriya raqami va boshqalar kabi qo'shimcha ma'lumotlar
qo'shing. Buferni o'qiyotganda. Bu murakkab, batafsil jarayonlarni animatsiyada tasavvur qilish
juda qiyin.
2.4, tezlik
Yana bir savol bor. Agar siz sekinlashuvni o'qiyotgan bo'lsangiz, agar NIC boshqa tomonga
ega bo'lsa, men nima qilishim kerak? Umumiy yondashuv ACKning boshqa tarafidan voz
kechishdir va agar boshqa tomon ACK kelmaydi deb o'ylasa, u xabarni qaytaradi. Nega bufer
to'la? Buning sababi, xabar qabul qiluvchilarni qayta ishlash sekinligi va yuboruvchi tomonidan
yaratilgan xabar juda tezligi. Bu vaqtda, TCP jo'natuvchining uzatish tezligini cheklash uchun
dinamik oyna algoritmiga ega bo'ladi, shuning uchun uzatish va qabul qilish samaradorligi mos
kelishi kerak. Agar bu UDP bo'lsa, unda xabar ehtiyotkorlik bilan yo'qoladi.
Bu rasm quyida tushuntiriladi:
Savol: Biroq, muammolarni hal qilish uchun asosiy RPC tuzilishini qanday aytish kerak, B
serveriga qanday ulanish kerak (masalan, xost manzili yoki IP -manzil) va ma'lum bir port va bu
usul nima deb ataladi?
Mijoz dasturida masofaviy protseduraga qo'ng'iroq boshlanganida, usul parametrlari asosiy
tarmoq protokolidan o'tishi kerak, masalan, serverda TCP, chunki tarmoq protokoli ikkilik
buyurtma asosida tuzilgan, xotiradagi parametr qiymati Ikkilik ketma -ket ikkilik B serverlarida
ketma -ket ikkilik ikkilikni manzil va uzatish orqali yuboradi.
Server so'ralganda, parametr mos keladi, xotiradagi ifodani tiklang, so'ngra mahalliy
qo'ng'iroq qilish uchun mos usulni (bitta elementni) toping, so'ngra qaytish qiymatini oling.
Do'stlaringiz bilan baham: |