Web Sockets প্রোটোকলটি ইভেন্ট-ভিত্তিক (event-driven) এবং স্টেট-ভিত্তিক (state-driven) যোগাযোগ প্রক্রিয়া প্রদান করে। এটি একটি স্টেট মেশিনের মাধ্যমে কাজ করে, যা কানেকশনের বিভিন্ন অবস্থায় থাকা তথ্যকে সঠিকভাবে পরিচালনা করে। Web Sockets এর মাধ্যমে ডেটা আদান-প্রদান করার সময় বিভিন্ন ইভেন্ট ট্রিগার হয়, এবং প্রতিটি ইভেন্ট একটি নির্দিষ্ট স্টেটের মধ্যে হয়।
Web Sockets Events
Web Sockets এ কিছু নির্দিষ্ট ইভেন্ট থাকে, যেগুলি ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগের সময় ঘটতে পারে। এই ইভেন্টগুলো কার্যক্রমের ভিত্তিতে ট্রিগার হয় এবং সেগুলির মাধ্যমে নির্দিষ্ট কার্যকরী প্রতিক্রিয়া ঘটে।
১. open Event
- বর্ণনা: এটি একটি প্রাথমিক ইভেন্ট, যা তখন ঘটে যখন Web Socket কানেকশন সফলভাবে স্থাপিত হয় এবং দুটি পক্ষের মধ্যে ডেটা আদান-প্রদান শুরু করতে প্রস্তুত থাকে।
- ব্যবহার: এটি সাধারণত Web Socket অবজেক্টের সাথে যুক্ত হয় এবং কানেকশন স্থাপনের পরে ডেটা পাঠানোর জন্য প্রস্তুতি নেয়।
উদাহরণ:
const socket = new WebSocket('wss://example.com'); socket.onopen = function(event) { console.log('Connection established!'); };
২. message Event
- বর্ণনা: এই ইভেন্টটি তখন ট্রিগার হয় যখন ক্লায়েন্ট বা সার্ভার থেকে কোনো ডেটা (টেক্সট বা বাইনারি) প্রাপ্ত হয়। এটি ডেটা পাঠানোর সময় ঘটে এবং এতে ডেটার কন্টেন্ট থাকে।
- ব্যবহার: এটি ইভেন্ট লিসেনারের মাধ্যমে ব্যবহৃত হয় এবং প্রতিটি বার্তা গ্রহণ করার পর প্রাসঙ্গিক কাজ করা হয়।
উদাহরণ:
socket.onmessage = function(event) { console.log('Received message: ' + event.data); };
৩. close Event
- বর্ণনা: এই ইভেন্টটি ঘটে যখন Web Socket কানেকশন বন্ধ হয়। এটি ক্লায়েন্ট বা সার্ভার যে কোনো পক্ষের দ্বারা "close frame" পাঠানোর পর ট্রিগার হয়।
- ব্যবহার: এটি সাধারণত কানেকশন বন্ধ হওয়ার পরে ক্লায়েন্ট বা সার্ভারের দ্বারা কোনো প্রতিক্রিয়া দেওয়ার জন্য ব্যবহৃত হয়।
উদাহরণ:
socket.onclose = function(event) { console.log('Connection closed!'); };
৪. error Event
- বর্ণনা: এই ইভেন্টটি তখন ট্রিগার হয় যখন কোনো ত্রুটি ঘটে, যেমন সার্ভারের সাথে কানেকশন সমস্যা, ডেটা ট্রান্সফার বা অন্যান্য সমস্যা।
- ব্যবহার: এটি ত্রুটির সনাক্তকরণের জন্য ব্যবহার করা হয়, যাতে ডেভেলপার বা ব্যবহারকারী ত্রুটি সম্পর্কিত তথ্য পেতে পারে।
উদাহরণ:
socket.onerror = function(event) { console.log('Error occurred: ' + event.message); };
Web Sockets স্টেটস
Web Sockets প্রোটোকলে কানেকশনের অবস্থা পরিবর্তন হয় বিভিন্ন স্টেটের মাধ্যমে, যা তার স্টেট মেশিনের অংশ। প্রতিটি স্টেটের মধ্যে নির্দিষ্ট কার্যক্রম চলে এবং এটি Web Socket কানেকশন স্থাপন, পরিচালনা এবং বন্ধ করার প্রক্রিয়া নির্ধারণ করে।
১. CLOSED (বন্ধ)
- বর্ণনা: এই অবস্থা তখন থাকে যখন Web Socket কানেকশন স্থাপন হয়নি বা সম্পূর্ণরূপে বন্ধ হয়ে গেছে।
- কার্যপ্রণালী: এই অবস্থায় Web Socket সঞ্চালিত হচ্ছে না এবং ডেটা আদান-প্রদান সম্ভব নয়।
- পরবর্তী পদক্ষেপ: যদি কোনো রিকোয়েস্ট শুরু করা হয়, তাহলে এটি "CONNECTING" অবস্থা থেকে শুরু হতে পারে।
২. CONNECTING (সংযোগ স্থাপন করা হচ্ছে)
- বর্ণনা: এই অবস্থায় ক্লায়েন্ট Web Socket কানেকশন তৈরি করার চেষ্টা করছে।
- কার্যপ্রণালী: ক্লায়েন্ট HTTP রিকোয়েস্ট পাঠিয়ে Web Socket কানেকশন স্থাপনের জন্য সার্ভারের অপেক্ষা করছে।
- পরবর্তী পদক্ষেপ: যদি সার্ভার রিকোয়েস্ট গ্রহণ করে এবং সফলভাবে Web Socket কানেকশন শুরু করে, তখন এটি "OPEN" অবস্থায় চলে যাবে।
৩. OPEN (খোলা)
- বর্ণনা: এটি Web Socket কানেকশনের সক্রিয় অবস্থা, যেখানে ডেটা পাঠানো এবং গ্রহণ করা সম্ভব।
- কার্যপ্রণালী: এই অবস্থায় ক্লায়েন্ট এবং সার্ভার একে অপরকে অবিচ্ছিন্নভাবে ডেটা পাঠাতে এবং গ্রহণ করতে পারে।
- পরবর্তী পদক্ষেপ: যখন কোনো পক্ষ কানেকশন বন্ধ করার সিদ্ধান্ত নেয়, তখন এটি "CLOSING" অবস্থায় চলে যাবে।
৪. CLOSING (বন্ধ করা হচ্ছে)
- বর্ণনা: এই অবস্থা তখন ঘটে যখন Web Socket কানেকশন বন্ধ করার প্রক্রিয়া শুরু হয়।
- কার্যপ্রণালী: একপক্ষ "close frame" পাঠায়, এবং অন্যপক্ষটি এই ফ্রেম গ্রহণ করে কানেকশন বন্ধ করার প্রক্রিয়া সম্পন্ন করে।
- পরবর্তী পদক্ষেপ: কানেকশন বন্ধ হয়ে গেলে, এটি "CLOSED" অবস্থায় চলে যায়।
সারাংশ
Web Sockets প্রোটোকলটি ইভেন্ট-ভিত্তিক এবং স্টেট-ভিত্তিক যোগাযোগের মাধ্যমে কাজ করে। এটি বিভিন্ন ইভেন্ট, যেমন open, message, close, এবং error ব্যবহার করে ডেটা আদান-প্রদান ও ত্রুটি হ্যান্ডলিং পরিচালনা করে। একইভাবে, এটি বিভিন্ন স্টেট (CLOSED, CONNECTING, OPEN, CLOSING) এর মধ্যে কাজ করে, যা Web Socket কানেকশনের অবস্থা এবং কার্যপ্রণালী নির্দেশ করে। এই ইভেন্ট এবং স্টেট সিস্টেম Web Socket কানেকশনের নির্ভরযোগ্যতা এবং কার্যকারিতা নিশ্চিত করে, যা রিয়েল-টাইম অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত গুরুত্বপূর্ণ।
WebSocket প্রোটোকলটি একটি স্টেট মেশিন ব্যবহার করে, যা কানেকশনের বিভিন্ন পর্যায়ের অবস্থা (states) নির্ধারণ করে। প্রতিটি অবস্থা একটি নির্দিষ্ট কার্যপ্রণালী এবং অবস্থা অনুসারে কার্য সম্পাদন করে। WebSocket এর এই চারটি Ready State — CONNECTING, OPEN, CLOSING, এবং CLOSED — যোগাযোগের বিভিন্ন পর্যায় চিহ্নিত করে এবং প্রতিটি স্টেটের মধ্যে নির্দিষ্ট কার্যক্রম ঘটে।
১. CONNECTING (সংযোগ স্থাপন করা হচ্ছে)
অবস্থান: এই অবস্থা তখন হয় যখন ক্লায়েন্ট WebSocket কানেকশন স্থাপন করার চেষ্টা করছে এবং সার্ভারের সাথে HTTP হ্যান্ডশেক চলছে।
- কার্যপ্রণালী: ক্লায়েন্ট প্রথমে WebSocket কানেকশন স্থাপন করার জন্য HTTP রিকোয়েস্ট পাঠায়। এই রিকোয়েস্টে "Upgrade" হেডার থাকে, যা সার্ভারকে জানায় যে ক্লায়েন্ট WebSocket প্রোটোকলে সংযোগ স্থাপন করতে চায়।
- পরবর্তী ধাপ: যদি সার্ভার রিকোয়েস্টটি গ্রহণ করে এবং সঠিক HTTP 101 রেসপন্স পাঠায়, তবে কানেকশনটি OPEN অবস্থায় চলে যাবে।
২. OPEN (খোলা)
অবস্থান: এটি WebSocket কানেকশনের সক্রিয় অবস্থা, যেখানে ক্লায়েন্ট এবং সার্ভার একে অপরকে ডেটা পাঠাতে এবং গ্রহণ করতে সক্ষম।
- কার্যপ্রণালী: একবার কানেকশন স্থাপিত হলে, এটি অবিচ্ছিন্নভাবে খোলা থাকে। এই অবস্থায়, ক্লায়েন্ট এবং সার্ভার একে অপরের সাথে ডেটা আদান-প্রদান করতে পারে।
- বৈশিষ্ট্য:
- ডেটা আদান-প্রদান দ্রুত এবং রিয়েল-টাইমে হয়।
- এখানে কোনো রিকোয়েস্ট-রেসপন্স চক্রের প্রয়োজন নেই।
- পরবর্তী ধাপ: যদি কেউ কানেকশন বন্ধ করতে চায়, তবে তা CLOSING অবস্থায় চলে যাবে।
৩. CLOSING (বন্ধ করা হচ্ছে)
অবস্থান: এই অবস্থায় কানেকশন বন্ধ করার প্রক্রিয়া শুরু হয়েছে, তবে সম্পূর্ণভাবে বন্ধ হয়নি।
- কার্যপ্রণালী: যখন একপক্ষ (ক্লায়েন্ট বা সার্ভার) close frame পাঠায়, তখন কানেকশন বন্ধ করার প্রক্রিয়া শুরু হয়।
- প্রথমে, একটি "close frame" পাঠানো হয়, যা অন্যপক্ষ গ্রহণ করে এবং সাড়া হিসেবে "close frame" পাঠায়।
- পরবর্তী ধাপ: একবার এই প্রক্রিয়া সম্পন্ন হলে, কানেকশন CLOSED অবস্থায় চলে যাবে।
৪. CLOSED (বন্ধ)
অবস্থান: এটি WebSocket কানেকশনের শেষ অবস্থা, যেখানে কানেকশন সম্পূর্ণরূপে বন্ধ হয়ে গেছে।
- কার্যপ্রণালী: এই অবস্থায় কোনো ডেটা আদান-প্রদান সম্ভব নয় এবং কানেকশনটি সম্পূর্ণভাবে বন্ধ থাকে। বন্ধ হওয়ার পরে, নতুন WebSocket কানেকশন স্থাপন করতে ক্লায়েন্ট আবার HTTP রিকোয়েস্ট পাঠাবে।
- পরবর্তী ধাপ: এখানে কোনো পরবর্তী ধাপ নেই। এটি WebSocket কানেকশনের শেষ অবস্থা।
সারাংশ
WebSocket প্রোটোকলটি চারটি Ready State ব্যবহার করে যা কানেকশনের অবস্থা নির্ধারণ করে: CONNECTING, OPEN, CLOSING, এবং CLOSED।
- CONNECTING অবস্থা যখন ক্লায়েন্ট কানেকশন স্থাপন করছে।
- OPEN অবস্থা যখন কানেকশন স্থায়ীভাবে খোলা থাকে এবং ডেটা আদান-প্রদান সম্ভব হয়।
- CLOSING অবস্থা যখন কানেকশন বন্ধ করার প্রক্রিয়া শুরু হয়েছে।
- CLOSED অবস্থা যখন কানেকশন সম্পূর্ণরূপে বন্ধ হয়ে গেছে।
এই স্টেটগুলো WebSocket প্রোটোকলের কার্যপ্রণালীকে সঠিকভাবে পরিচালনা করতে সাহায্য করে এবং কানেকশন স্থাপন থেকে বন্ধ হওয়া পর্যন্ত প্রতিটি ধাপের সমন্বয় নিশ্চিত করে।
Web Sockets প্রোটোকলটি একটি ইভেন্ট-ভিত্তিক (event-driven) কমিউনিকেশন মডেল ব্যবহার করে, যেখানে ক্লায়েন্ট এবং সার্ভার একে অপরের সাথে ডেটা আদান-প্রদান করার সময় নির্দিষ্ট ইভেন্টগুলির প্রতিক্রিয়া হিসেবে কাজ করে। Web Sockets এর মাধ্যমে, কানেকশন স্থাপনের পর থেকে ক্লায়েন্ট এবং সার্ভার একে অপরকে ইভেন্টের মাধ্যমে তথ্য পাঠাতে এবং গ্রহণ করতে পারে। এই প্রক্রিয়ায় প্রতিটি ইভেন্ট একটি নির্দিষ্ট কাজ সম্পাদন করে এবং এটি সহজে হ্যান্ডল করা যায়। নিচে Web Sockets এ ইভেন্ট হ্যান্ডলিংয়ের মৌলিক ধারণা আলোচনা করা হলো।
১. ইভেন্ট হ্যান্ডলিং কি?
ইভেন্ট হ্যান্ডলিং হল এমন একটি পদ্ধতি, যেখানে নির্দিষ্ট ইভেন্টগুলির জন্য প্রতিক্রিয়া তৈরি করা হয়। Web Sockets এর ক্ষেত্রে, এটি কানেকশন স্থাপন, ডেটা প্রাপ্তি, বা কানেকশন বন্ধের মতো ইভেন্টগুলির জন্য ব্যবহৃত হয়। Web Sockets ইভেন্ট হ্যান্ডলিংয়ে, ক্লায়েন্ট এবং সার্ভার নির্দিষ্ট ইভেন্টগুলোর জন্য হ্যান্ডলার ফাংশন বা কোড ব্যবহার করে প্রতিক্রিয়া তৈরি করে।
২. Web Sockets এ সাধারণ ইভেন্ট
Web Sockets এ কয়েকটি সাধারণ ইভেন্ট রয়েছে, যার মাধ্যমে ক্লায়েন্ট এবং সার্ভার একে অপরের সাথে যোগাযোগ স্থাপন এবং ডেটা আদান-প্রদান করে। এই ইভেন্টগুলির মধ্যে কিছু সাধারণ ইভেন্ট নিচে আলোচনা করা হলো:
open – কানেকশন সফলভাবে স্থাপিত হওয়ার পর ঘটে।
- কাজ: এটি ইভেন্টটি যখন Web Socket কানেকশন সফলভাবে স্থাপিত হয়, তখন এটি ট্রিগার হয়। এর মাধ্যমে ক্লায়েন্ট বা সার্ভার জানায় যে কানেকশন প্রস্তুত এবং ডেটা পাঠানো যেতে পারে।
কোড উদাহরণ:
socket.onopen = function(event) { console.log("WebSocket is connected."); };message – ডেটা প্রাপ্তির পর ঘটে।
- কাজ: এটি ইভেন্টটি যখন ক্লায়েন্ট বা সার্ভার একটি বার্তা গ্রহণ করে, তখন এটি ট্রিগার হয়। এই ইভেন্টের মাধ্যমে প্রাপ্ত ডেটা প্রসেস করা হয়।
কোড উদাহরণ:
socket.onmessage = function(event) { console.log("Received message: " + event.data); };error – কোনো ত্রুটি ঘটলে ঘটে।
- কাজ: এটি ইভেন্টটি Web Socket কানেকশনে ত্রুটি বা সমস্যা হলে ট্রিগার হয়। সাধারণত, এটি একটি "exception handler" হিসেবে কাজ করে এবং সমস্যা সমাধানে সহায়তা করে।
কোড উদাহরণ:
socket.onerror = function(event) { console.error("WebSocket error: " + event); };close – কানেকশন বন্ধ হওয়া।
- কাজ: এটি ইভেন্টটি যখন কানেকশন বন্ধ হয়ে যায়, তখন এটি ট্রিগার হয়। এটা স্বাভাবিকভাবে "close frame" পাঠানোর মাধ্যমে ঘটে।
কোড উদাহরণ:
socket.onclose = function(event) { console.log("WebSocket connection closed."); };
৩. ইভেন্ট হ্যান্ডলিংয়ের প্রক্রিয়া
Web Sockets এ ইভেন্ট হ্যান্ডলিং সাধারণত JavaScript এ কোড লিখে সম্পন্ন হয়, যেখানে on প্রপার্টি ব্যবহার করে প্রতিটি ইভেন্টের জন্য হ্যান্ডলার সেট করা হয়। নিচে একটি সাধারণ উদাহরণ দেওয়া হলো, যা Web Socket কানেকশন স্থাপন, বার্তা পাঠানো এবং কানেকশন বন্ধ করার জন্য ইভেন্ট হ্যান্ডলিং দেখায়:
// Web Socket কানেকশন স্থাপন
let socket = new WebSocket("wss://example.com/socket");
// open ইভেন্ট হ্যান্ডলিং
socket.onopen = function(event) {
console.log("Connection established.");
// কানেকশন স্থাপন হওয়ার পর একটি বার্তা পাঠানো
socket.send("Hello, server!");
};
// message ইভেন্ট হ্যান্ডলিং
socket.onmessage = function(event) {
console.log("Received message: " + event.data);
};
// error ইভেন্ট হ্যান্ডলিং
socket.onerror = function(event) {
console.error("WebSocket error: " + event);
};
// close ইভেন্ট হ্যান্ডলিং
socket.onclose = function(event) {
console.log("Connection closed.");
};
৪. ইভেন্ট হ্যান্ডলিংয়ের সুবিধা
- রিয়েল-টাইম কমিউনিকেশন: Web Sockets ব্যবহার করে, ইভেন্ট হ্যান্ডলিংয়ের মাধ্যমে ক্লায়েন্ট এবং সার্ভার একে অপরের সাথে রিয়েল-টাইমে যোগাযোগ করতে পারে। যেমন, চ্যাট অ্যাপ্লিকেশন বা গেমিং সার্ভিসে দ্রুত প্রতিক্রিয়া প্রদান করা।
- ইভেন্ট-ভিত্তিক সিস্টেম: ইভেন্ট হ্যান্ডলিংয়ের মাধ্যমে কোডকে আরও কার্যকরী এবং সহজে পরিচালনা করা যায়। প্রতিটি ইভেন্ট একটি নির্দিষ্ট কাজ সম্পন্ন করে এবং হ্যান্ডলারের মাধ্যমে এর প্রতিক্রিয়া নির্ধারিত হয়।
- বিলম্বহীন প্রতিক্রিয়া: Web Sockets এ ইভেন্ট-ভিত্তিক যোগাযোগের মাধ্যমে ক্লায়েন্ট এবং সার্ভার খুব দ্রুত একে অপরের কাছে প্রতিক্রিয়া প্রদান করতে সক্ষম হয়, যা সিস্টেমের দ্রুততা বাড়ায়।
সারাংশ
Web Sockets প্রোটোকলে ইভেন্ট হ্যান্ডলিং হল একটি গুরুত্বপূর্ণ অংশ, যা ইভেন্টগুলির মাধ্যমে ডেটা আদান-প্রদান এবং কার্যপ্রণালী নিয়ন্ত্রণ করে। প্রতিটি ইভেন্টের জন্য একটি হ্যান্ডলার কোড তৈরি করা হয়, যা ইভেন্টের প্রতি সঠিক প্রতিক্রিয়া প্রদান করে। যেমন, Web Socket কানেকশন স্থাপন, ডেটা প্রাপ্তি, ত্রুটি বা কানেকশন বন্ধ হওয়ার ক্ষেত্রে ইভেন্ট হ্যান্ডলিং কার্যকরী ভূমিকা পালন করে। এটি Web Sockets এর মাধ্যমে রিয়েল-টাইম, দ্বৈত দিকের যোগাযোগ নিশ্চিত করে।
Web Sockets এ Custom Events তৈরি করার মাধ্যমে আপনি ক্লায়েন্ট এবং সার্ভারের মধ্যে কাস্টম ইভেন্ট হ্যান্ডলিং করতে পারেন। এটি আপনাকে প্রয়োজনীয় ইভেন্টের জন্য নির্দিষ্ট ফাংশন তৈরি করতে এবং সেই ইভেন্টগুলিকে ট্রিগার করতে সহায়ক হয়। Custom Events ব্যবহার করে আপনি Web Socket কানেকশনের মধ্যে বিশেষ ধরনের ইন্টারঅ্যাকশন ও ডেটা আদান-প্রদান করতে পারেন।
Custom Events কি?
Custom Events হল এমন ইভেন্ট যেগুলো আপনি নিজেই ডিফাইন করেন, যেগুলি সাধারণত ব্রাউজার বা সার্ভারের ডিফল্ট ইভেন্টের বাইরে। Web Sockets এর মাধ্যমে, আপনি ক্লায়েন্ট এবং সার্ভারের মধ্যে নির্দিষ্ট ইভেন্টগুলি তৈরি ও শোনার জন্য কাস্টম ইভেন্ট ব্যবহার করতে পারেন।
যেমন, আপনি একটি চ্যাট অ্যাপ্লিকেশনে "new_message" নামে একটি কাস্টম ইভেন্ট তৈরি করতে পারেন, যেটি বার্তা পাঠানোর সময় ট্রিগার হবে এবং সার্ভার বা ক্লায়েন্ট সেই বার্তাটি গ্রহণ করবে।
কাস্টম ইভেন্ট তৈরি করার প্রক্রিয়া
Web Sockets এ Custom Events তৈরি করার জন্য, আপনি সাধারণত ইভেন্ট লিসেনার (Event Listener) এবং ইভেন্ট ট্রিগার (Event Trigger) ব্যবহার করবেন। নীচে কাস্টম ইভেন্ট তৈরি করার একটি সহজ প্রক্রিয়া দেয়া হলো।
১. ক্লায়েন্ট সাইডে কাস্টম ইভেন্ট পাঠানো
ক্লায়েন্ট সাইডে, আপনি Web Socket কানেকশন ব্যবহার করে কাস্টম ইভেন্ট পাঠাতে পারেন। উদাহরণস্বরূপ, "new_message" নামে একটি কাস্টম ইভেন্ট তৈরি করতে পারেন এবং সেই ইভেন্টটি সার্ভারে পাঠাতে পারেন।
// Web Socket কানেকশন তৈরি
const socket = new WebSocket('ws://example.com');
// কানেকশন খোলা হলে কাস্টম ইভেন্ট পাঠানো
socket.onopen = function() {
// Custom Event পাঠানো
const customEvent = {
type: 'new_message',
data: 'Hello, Server!'
};
socket.send(JSON.stringify(customEvent)); // কাস্টম ইভেন্ট সার্ভারে পাঠানো
};
এখানে, new_message নামে একটি কাস্টম ইভেন্ট তৈরি করা হয়েছে, যেখানে "data" অংশে বার্তা রয়েছে। এই ইভেন্টটি JSON ফরম্যাটে সার্ভারে পাঠানো হচ্ছে।
২. সার্ভার সাইডে কাস্টম ইভেন্ট গ্রহণ
সার্ভার সাইডে, আপনি Web Socket কানেকশন গ্রহণ করার পর কাস্টম ইভেন্টগুলো প্রক্রিয়া করতে পারেন। উদাহরণস্বরূপ, যদি আপনি Node.js ব্যবহার করছেন, তাহলে ws লাইব্রেরি ব্যবহার করে কাস্টম ইভেন্ট গ্রহণ করা যেতে পারে।
const WebSocket = require('ws');
// Web Socket সার্ভার তৈরি
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', (ws) => {
ws.on('message', (message) => {
// কাস্টম ইভেন্ট ডিকোড করা
const customEvent = JSON.parse(message);
if (customEvent.type === 'new_message') {
console.log('New message received:', customEvent.data);
// এখানে আপনি ডেটা প্রক্রিয়া করতে পারেন, যেমনঃ ক্লায়েন্টে রিপ্লাই পাঠানো
}
});
});
এখানে, সার্ভার Web Socket কানেকশন গ্রহণ করে এবং যখন ক্লায়েন্ট কোনো মেসেজ পাঠায়, তখন সেই মেসেজটি JSON আকারে ডিকোড করা হয়। যদি এটি একটি new_message কাস্টম ইভেন্ট হয়, তবে সার্ভার সেই বার্তা লগ করে বা অন্য কোনো প্রক্রিয়া চালায়।
৩. সার্ভার থেকে ক্লায়েন্টে কাস্টম ইভেন্ট পাঠানো
সার্ভার থেকে কাস্টম ইভেন্ট পাঠানোর জন্য, আপনি সার্ভার থেকে নির্দিষ্ট ক্লায়েন্টকে বা সমস্ত সংযুক্ত ক্লায়েন্টদের একটি কাস্টম ইভেন্ট পাঠাতে পারেন।
wss.on('connection', (ws) => {
// ক্লায়েন্টে একটি কাস্টম ইভেন্ট পাঠানো
const response = {
type: 'new_message',
data: 'Hello, Client! This is a server message.'
};
ws.send(JSON.stringify(response)); // কাস্টম ইভেন্ট ক্লায়েন্টে পাঠানো
});
এখানে, সার্ভার থেকে ক্লায়েন্টে new_message নামে একটি কাস্টম ইভেন্ট পাঠানো হচ্ছে।
৪. ক্লায়েন্ট সাইডে কাস্টম ইভেন্ট গ্রহণ
ক্লায়েন্ট সাইডে, আপনি Web Socket কানেকশনের মাধ্যমে পাঠানো কাস্টম ইভেন্ট গ্রহণ করতে পারেন এবং সেই অনুযায়ী প্রতিক্রিয়া তৈরি করতে পারেন।
socket.onmessage = function(event) {
const customEvent = JSON.parse(event.data);
if (customEvent.type === 'new_message') {
console.log('New message from server:', customEvent.data);
// এখানে ক্লায়েন্টে একটি UI আপডেট করা যেতে পারে
}
};
এখানে, যখন সার্ভার একটি new_message কাস্টম ইভেন্ট পাঠাবে, তখন ক্লায়েন্ট সেটি গ্রহণ করে এবং মেসেজটি কনসোলে দেখাবে।
সারাংশ
Web Sockets ব্যবহার করে কাস্টম ইভেন্ট তৈরি এবং ব্যবহারের মাধ্যমে আপনি ক্লায়েন্ট এবং সার্ভারের মধ্যে আরও স্পেসিফিক, রিয়েল-টাইম যোগাযোগ প্রতিষ্ঠা করতে পারেন। কাস্টম ইভেন্টগুলি ব্যবহার করে আপনি নির্দিষ্ট কার্যক্রমের জন্য ইভেন্ট হ্যান্ডলিং করতে পারবেন, যা আপনার অ্যাপ্লিকেশনকে আরো কার্যকরী এবং ইন্টারঅ্যাকটিভ করে তোলে। Web Sockets এর মাধ্যমে এই ধরনের কাস্টম ইভেন্ট তৈরি ও পরিচালনা করা সহজ এবং দ্রুত, যা রিয়েল-টাইম অ্যাপ্লিকেশনগুলির জন্য বিশেষভাবে উপকারী।
Web Sockets এ, ইভেন্ট লিসেনার (event listeners) হল একটি গুরুত্বপূর্ণ উপাদান যা ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান বা নির্দিষ্ট ইভেন্টগুলির প্রতিক্রিয়া (reaction) পরিচালনা করে। ইভেন্ট লিসেনার ব্যবহার করে, আমরা Web Socket কানেকশনের উপর বিভিন্ন কার্যক্রম এবং ইভেন্টগুলি শোনা বা ধরতে পারি, যেমন কানেকশন খোলা, বার্তা প্রাপ্তি, এবং কানেকশন বন্ধ হওয়া।
এই টিউটোরিয়ালে, আমরা শিখবো কিভাবে Web Socket এ ইভেন্ট লিসেনার যোগ এবং মুছে ফেলতে হয়।
১. ইভেন্ট লিসেনার যোগ করা
Web Sockets এ ইভেন্ট লিসেনার যোগ করা হয় addEventListener() মেথড ব্যবহার করে। এই মেথডের মাধ্যমে আপনি নির্দিষ্ট ইভেন্টের জন্য লিসেনার ফাংশন নির্ধারণ করতে পারেন, যা ইভেন্ট ঘটলে কার্যকরী হবে।
সাধারণ সিনট্যাক্স:
webSocket.addEventListener('event', callbackFunction);
এখানে,
event: যে ইভেন্টটি আপনি শোনার জন্য অপেক্ষা করবেন, যেমন'open','message','close', অথবা'error'।callbackFunction: যেটি ইভেন্টটি ট্রিগার হওয়ার পর চলবে।
উদাহরণ:
// WebSocket কানেকশন তৈরি করা
const webSocket = new WebSocket('wss://example.com/socket');
// ইভেন্ট লিসেনার যোগ করা
webSocket.addEventListener('open', function(event) {
console.log('WebSocket কানেকশন স্থাপন হয়েছে');
});
webSocket.addEventListener('message', function(event) {
console.log('বার্তা প্রাপ্তি:', event.data);
});
webSocket.addEventListener('close', function(event) {
console.log('WebSocket কানেকশন বন্ধ হয়েছে');
});
webSocket.addEventListener('error', function(event) {
console.error('WebSocket ত্রুটি:', event);
});
এই কোডে, Web Socket কানেকশন তৈরি করার পর, আমরা বিভিন্ন ধরনের ইভেন্টের জন্য লিসেনার যোগ করেছি:
openইভেন্ট যখন WebSocket কানেকশন সফলভাবে স্থাপন হয়।messageইভেন্ট যখন সার্ভার থেকে কোনো বার্তা আসে।closeইভেন্ট যখন কানেকশন বন্ধ হয়।errorইভেন্ট যখন কোনো ত্রুটি ঘটে।
২. ইভেন্ট লিসেনার মুছে ফেলা
Web Socket থেকে একটি নির্দিষ্ট ইভেন্ট লিসেনার মুছে ফেলতে removeEventListener() মেথড ব্যবহার করা হয়। এটি লিসেনারটি সরিয়ে দেয়, যাতে সেটি আর ওই ইভেন্টের জন্য সক্রিয় না থাকে।
সাধারণ সিনট্যাক্স:
webSocket.removeEventListener('event', callbackFunction);
এখানে,
event: যে ইভেন্টের জন্য লিসেনারটি মুছে ফেলতে চান।callbackFunction: যেটি আপনি লিসেনার হিসেবে ব্যবহার করেছেন, তা সরিয়ে ফেলার জন্য প্রয়োজন।
উদাহরণ:
// WebSocket কানেকশন তৈরি করা
const webSocket = new WebSocket('wss://example.com/socket');
// ইভেন্ট লিসেনার যোগ করা
function onMessage(event) {
console.log('বার্তা প্রাপ্তি:', event.data);
}
webSocket.addEventListener('message', onMessage);
// কিছু সময় পর, ইভেন্ট লিসেনার মুছে ফেলা
webSocket.removeEventListener('message', onMessage);
এখানে, আমরা প্রথমে message ইভেন্টের জন্য একটি লিসেনার যোগ করেছি এবং পরে সেটি removeEventListener() মেথড ব্যবহার করে সরিয়ে ফেলেছি। এর ফলে, WebSocket কানেকশনে message ইভেন্টটি আর শোনা হবে না।
৩. ইভেন্ট লিসেনার এর প্রয়োজনীয়তা
Web Sockets এ ইভেন্ট লিসেনার ব্যবহার করার প্রধান কারণ হল:
- রিয়েল-টাইম ডেটা: WebSocket ইভেন্ট লিসেনার গুলি আমাদের রিয়েল-টাইম ডেটা প্রাপ্তির জন্য প্রয়োজনীয় কার্যকরী প্রতিক্রিয়া প্রদান করে।
- এলার্টিং ও ম্যানেজমেন্ট: কানেকশন এবং ত্রুটির জন্য এলার্ট এবং সমাধান ব্যবস্থা তৈরি করতে পারে।
- অটোমেশন ও কার্যক্রম: নির্দিষ্ট ইভেন্টগুলির জন্য স্বয়ংক্রিয় প্রক্রিয়া শুরু করার মাধ্যমে ওয়েব অ্যাপ্লিকেশনগুলির কার্যক্ষমতা বাড়ানো যায়।
৪. একটি উদাহরণ: প্রাথমিক WebSocket অ্যাপ্লিকেশন
// WebSocket কানেকশন তৈরি করা
const webSocket = new WebSocket('wss://example.com/socket');
// 'open' ইভেন্টের জন্য লিসেনার যোগ করা
webSocket.addEventListener('open', function(event) {
console.log('WebSocket কানেকশন সফল!');
webSocket.send('হ্যালো সার্ভার!');
});
// 'message' ইভেন্টের জন্য লিসেনার যোগ করা
webSocket.addEventListener('message', function(event) {
console.log('সার্ভার থেকে বার্তা:', event.data);
});
// 'close' ইভেন্টের জন্য লিসেনার যোগ করা
webSocket.addEventListener('close', function(event) {
console.log('WebSocket কানেকশন বন্ধ হয়েছে');
});
// 'error' ইভেন্টের জন্য লিসেনার যোগ করা
webSocket.addEventListener('error', function(event) {
console.error('WebSocket ত্রুটি:', event);
});
// কিছু সময় পর ইভেন্ট লিসেনার মুছে ফেলা
setTimeout(function() {
webSocket.removeEventListener('message', function(event) {
console.log('এই লিসেনারটি মুছে ফেলা হয়েছে');
});
}, 5000);
এখানে, WebSocket সংযোগ স্থাপনের পর আমরা বিভিন্ন ইভেন্টের জন্য লিসেনার যোগ করেছি এবং পরে কিছু সময় পর message ইভেন্টের জন্য লিসেনারটি মুছে ফেলেছি।
সারাংশ
Web Sockets প্রোটোকলে ইভেন্ট লিসেনার ব্যবহার করে আমরা কানেকশন এবং ডেটা আদান-প্রদান সম্পর্কিত বিভিন্ন ইভেন্টগুলির জন্য প্রতিক্রিয়া নিশ্চিত করতে পারি। addEventListener() মেথডের মাধ্যমে ইভেন্ট লিসেনার যোগ এবং removeEventListener() মেথডের মাধ্যমে তা মুছে ফেলা হয়। এই প্রক্রিয়াটি WebSocket এর কার্যকরী এবং রিয়েল-টাইম ডেটা পরিচালনা করতে সাহায্য করে, যা চ্যাট অ্যাপ্লিকেশন, লাইভ স্ট্রিমিং এবং অন্যান্য ইন্টারঅ্যাকটিভ সিস্টেমে খুবই গুরুত্বপূর্ণ।
Read more