এই টিউটোরিয়ালটি দেখায় কিভাবে আপনার ক্রোম এক্সটেনশনের পরিষেবা কর্মীর একটি ওয়েবসকেটের সাথে সংযোগ করতে হয়৷ আপনি Github এ একটি কাজের উদাহরণ খুঁজে পেতে পারেন।
পটভূমি
Chrome 116 দিয়ে শুরু করে, এক্সটেনশন পরিষেবা কর্মীরা WebSockets- এর জন্য উন্নত সমর্থন পান৷ পূর্বে, 30 সেকেন্ডের জন্য অন্য কোনো এক্সটেনশন ইভেন্ট না ঘটলে ওয়েবসকেট সংযোগ সক্রিয় থাকা সত্ত্বেও একজন পরিষেবা কর্মী নিষ্ক্রিয় হয়ে যেতে পারে। এটি পরিষেবা কর্মীকে সমাপ্ত করবে এবং WebSocket সংযোগ বন্ধ করবে৷ এক্সটেনশন পরিষেবা কর্মী লাইফসাইকেল সম্পর্কে আরও পটভূমির জন্য, এক্সটেনশন পরিষেবা কর্মী নির্দেশিকা পড়ুন)।
Chrome 116 থেকে, আপনি 30-এর দশকের পরিষেবা কর্মী কার্যকলাপ উইন্ডোর মধ্যে বার্তা বিনিময় করে ওয়েবসকেট সংযোগ সহ একজন পরিষেবা কর্মীকে সক্রিয় রাখতে পারেন৷ এগুলি হয় আপনার সার্ভার থেকে বা আপনার এক্সটেনশন থেকে শুরু করা যেতে পারে। নিম্নলিখিত উদাহরণে, আমরা সার্ভারে Chrome এক্সটেনশন থেকে একটি নিয়মিত বার্তা পাঠাব যাতে পরিষেবা কর্মী বেঁচে থাকে।
উদাহরণ: WebSocket Keepalive
প্রথ��ে আমাদের নিশ্চিত করতে হবে যে আমাদের এক্সটেনশনটি ম্যানিফেস্টে ন্যূনতম ক্রোম সংস্করণ 116-এ সেট করে পরিষেবা কর্মীদের ওয়েবসকেট সমর্থনকারী Chrome সংস্করণগুলিতেই চলে:
manifest.json:
{
...
"minimum_chrome_version": "116",
...
}
তারপরে আমরা প্রতি 20 সেকেন্ডে একটি কিপলাইভ বার্তা পাঠিয়ে পরিষেবা কর্মীকে সক্রি��় ��াখতে পার������ ��রিষেবা কর্মী WebSocket এর সাথে সংযোগ করলে কিপলাইভ চালু হয়। নিচের নমুনা WebSocket ক্লায়েন্ট বার্তা লগ করে এবং keepAlive()
কল করে যখন onopen
ইভেন্টটি ট্রিগার হয়:
service-worker.js
let webSocket = null;
function connect() {
webSocket = new WebSocket('wss://example.com/ws');
webSocket.onopen = (event) => {
console.log('websocket open');
keepAlive();
};
webSocket.onmessage = (event) => {
console.log(`websocket received message: ${event.data}`);
};
webSocket.onclose = (event) => {
console.log('websocket connection closed');
webSocket = null;
};
}
function disconnect() {
if (webSocket == null) {
return;
}
webSocket.close();
}
keepAlive()
এর ভিতরে আমরা একটি সক্রিয় WebSocket সংযোগ থাকাকালীন সার্ভারে নিয়মিত একটি পিং পাঠাতে setInterval(...)
ব্যবহার করি:
function keepAlive() {
const keepAliveIntervalId = setInterval(
() => {
if (webSocket) {
webSocket.send('keepalive');
} else {
clearInterval(keepAliveIntervalId);
}
},
// Set the interval to 20 seconds to prevent the service worker from becoming inactive.
20 * 1000
);
}