Programming TypeScript


Download 1.81 Mb.
bet152/206
Sana01.11.2023
Hajmi1.81 Mb.
#1737990
1   ...   148   149   150   151   152   153   154   155   ...   206
Bog'liq
Boris Cherny Programming TypeScript Making Your JavaScript Applications (1)

"compilerOptions" : {
"lib" : [ "webworker" , "es2015" ]
}
}
ham Web Worker skripti, ham asosiy oqim uchun bitta tsconfig.json dan foydalanayotgan bo‘lsangiz, ikkalasini bir vaqtning o‘zida yoqing.
API uzatuvchi xabar shunday ishlaydi. Siz birinchi navbatda ipdan veb-ishchini yaratasiz:
// MainThread.ts
ruxsat bering ishchi = yangi Ishchi ( 'WorkerScript.js' ) Keyin siz ushbu ishchiga xabarlarni yuborasiz:
// MainThread.ts
ruxsat bering ishchi = yangi Ishchi ( 'WorkerScript.js' )
ishchi . postMessage ( 'ba'zi ma'lumotlar' )
PostMessage API yordamida deyarli har qanday ma'lumotni boshqa mavzuga o'tkazishingiz mumkin . 40Asosiy ish zarrachasi siz uzatgan ma'lumotlarni ishchi ipga topshirishdan oldin klonlaydi . 41Veb ishchi tomonida siz global miqyosda mavjud onmessage API bilan kiruvchi voqealarni tinglaysiz:
// WorkerScript.ts xabari = e => {
konsol . log ( e . data ) // 'ba'zi ma'lumotlar' tizimdan chiqadi }
Qarama-qarshi yo'nalishda muloqot qilish uchun - ishchidan asosiy tarmoqqa - siz asosiy mavzuga xabar yuborish uchun global mavjud postMessage- dan va kiruvchi xabarlarni tinglash uchun asosiy mavzudagi .onmessage usulidan foydalanasiz. Hammasini birlashtirish uchun:
// MainThread.ts
ruxsat bering ishchi = yangi Ishchi ( 'WorkerScript.js' )
ishchi . xabar = e => {
konsol . log ( e . data ) // "Qabul qilish: "ba'zi ma'lumotlar"" tizimdan chiqadi
}
ishchi . postMessage ( 'ba'zi ma'lumotlar' )
// WorkerScript.ts xabari = e => {
konsol . log ( e . data ) // 'ba'zi ma'lumotlar' tizimdan chiqadi
postMessage ( Ack : "${e.data}" ) }
sahifadagi "Voqealar emitentlari" bo'limida ko'rib chiqqan voqea emitter API-ga juda o'xshaydi
184 . Bu xabarlarni uzatishning oddiy usuli, ammo turlarisiz biz yuborilishi mumkin bo'lgan barcha xabar turlarini to'g'ri ko'rib chiqqanimizni bilmaymiz. Ushbu API haqiqatan ham voqea emitteri bo'lgani uchun biz uni yozish uchun oddiy hodisa emitentlari kabi usullarni qo'llashimiz mumkin. Misol uchun, keling, chat mijozi uchun oddiy xabar almashish qatlamini yarataylik, biz uni ishchi ipda ishga tushiramiz. Xabarlar qatlami yangilanishlarni asosiy mavzuga olib boradi va biz xatolarni qayta ishlash, ruxsatnomalar va hokazolar haqida tashvishlanmaymiz. Biz ba'zi kiruvchi va chiquvchi xabar turlarini aniqlashdan boshlaymiz (asosiy tarmoq ishchi ipga buyruqlar yuboradi va ishchi ip voqealarni asosiy mavzuga qaytaradi):
// MainThread.ts turi Xabar = string turi ThreadID = raqam turi Foydalanuvchi IDsi = raqam turi Ishtirokchilar = UserID [] turi Buyruqlar = {
sendMessageToThread : [ ThreadID , Xabar ]
createThread : [ Ishtirokchilar ] addUserToThread : [ ThreadID , UserID ] removeUserFromThread : [ ThreadID , UserID ] }
turi Voqealar = {
acceptMessage : [ ThreadID , UserID , Message ] createdThread : [ ThreadID , ishtirokchilar ] addedUserToThread : [ ThreadID , UserID ] removeUserFromThread : [ ThreadID , UserID ] }
Ushbu turlarni Web Worker xabar almashish API'siga qanday qo'llashimiz mumkin? Eng oddiy usul barcha mumkin bo'lgan xabar turlarini birlashtirib, keyin xabar turini yoqish bo'lishi mumkin . Ammo bu juda zerikarli bo'lishi mumkin. Bizning buyruq turimiz uchun u shunday ko'rinishi mumkin:
// WorkerScript.ts turi Buyruq =
| { turi : 'sendMessageToThread' , ma'lumotlar : [ ThreadID , Xabar ]}
| { turi : 'createThread' , ma'lumotlar : [ Ishtirokchilar ]}
| { turi : 'addUserToThread' , ma'lumotlar : [ ThreadID , UserID ]}
| { turi : 'removeUserFromThread' , ma'lumotlar : [ ThreadID , UserID ]}
xabar = e =>
processCommandFromMainThread ( masalan , ma'lumotlar )

Download 1.81 Mb.

Do'stlaringiz bilan baham:
1   ...   148   149   150   151   152   153   154   155   ...   206




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling