Mauvzu: Exo serverni ishlab chiqarish chiqish Reja:
Mijoz / server dasturi
TCP echo server / mijoz
TCP sinxron mijoz
Bu bobda biz kichik mijoz / server dasturini amalga oshiramiz, bu, ehtimol, eng oddiy mijoz
/ server ilovasi bo'ladi. Bu mijozning yozganlarini mijozga qaytaradigan va keyin mijozning aloqasini yopadigan echo -server ilovasi. Server har qanday mijozlar bilan ishlashi mumkin. Yangi mijoz ulanganida, u xabar yuboradi. Server butun xabarni oladi va uni qaytaradi. Shundan so'ng, u aloqani yopadi. Shunday qilib, har bir echo -mijoz serverga ulanadi, xabar yuboradi va server nima javob berganligini o'qiydi, bu uning yuborgan xabari ekanligiga ishonch hosil qiladi va server bilan suhbatni tugatadi.
Biz avval sinxron dasturni, so'ngra asenkron dasturni ishga solamiz, shuning uchun siz ularni osongina solishtirishingiz mumkin:
Bu erda butun kod to'liq ko'rsatilmaydi, faqat uning qismlari, barcha kodni maqolaning oxiridagi havolada ko'rish mumkin.
TCP echo server / mijoz
TCP uchun biz "\ n" belgisi bilan tugaydigan har bir xabarning qo'shimcha afzalliklariga ega bo'lishimiz mumkin. Sinxron echo -server / mijoz yozish juda oson. Biz sinxron mijoz, sinxron server, asenkron mijoz va asenkron server kabi dasturlarga misollar keltiramiz.
TCP sinxron mijoz
Ko'pgina noaniq misollarda, mijoz kodi odatda server kodidan ancha sodda (chunki server bir nechta mijozlar bilan ishlashga to'g'ri keladi). Quyidagi misol qoidadan istisno hisoblanadi:
Funktsiyaga e'tibor bering sync_echo. U serverga ulanish uchun barcha mantiqni o'z ichiga oladi, unga xabar yuboradi va javob qaytarilishini kutadi. Siz o'qish uchun bepul funktsiyadan foydalanayotganimizni payqadingiz read(), chunki biz butun xabarni '\ n' belgisigacha olishni xohlaymiz. Funktsiya sock.read_some()etarli bo'lmaydi, chunki u faqat mavjud bo'lgan narsalarni o'qiydi, lekin bu xabarni to'liq emas. Read () funktsiyasining uchinchi dalili oxirgi ishlovchi. Agar xabar to'liq o'qilgan bo'lsa, u 0 ga qaytadi. Aks holda, keyingi bosqichda (bajarilishidan oldin read) o'qilishi mumkin bo'lgan buferning maksimal hajmi qaytariladi . Bizning holatda, u har doim 1 -ni qaytaradi, chunki biz xato qilgandan ko'ra ko'proq o'qishni xohlamaymiz. Vmain()biz bir nechta mavzu yaratamiz; mijoz yuboradigan har bir xabar uchun bitta mavzu va ularning bajarilishini kuting. Agar siz dasturni ishga tushirsangiz, siz quyidagi natijani ko'rasiz:
server echoed our John says hi: OK server echoed our so does James: OK
server echoed our Lucy just got home: OK server echoed our Boost.Asio is Fun!: OK
E'tibor bering, biz sinxron mijoz bilan ishlayotganimiz uchun qo'ng'iroq qilishning hojati yo'q service.run().
Do'stlaringiz bilan baham: |