Web Sockets প্রোটোকলটি ক্লায়েন্ট এবং সার্ভারের মধ্যে রিয়েল-টাইম ডেটা আদান-প্রদান করার জন্য ব্যবহৃত হয়। যখন ডেটা Web Socket কানেকশনের মাধ্যমে পাঠানো হয়, তখন তা একটি নির্দিষ্ট ফরম্যাটে এনকোড করা হয় এবং যখন সেই ডেটা গ্রহণ করা হয়, তখন তা ডিকোড করা হয় যাতে উভয় পক্ষই ডেটা সঠিকভাবে বুঝতে পারে। Web Sockets এ ডেটা এনকোডিং এবং ডিকোডিং অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি ডেটার সঠিকতা এবং গতি বজায় রাখে।
ডেটা এনকোডিং এবং ডিকোডিং এর গুরুত্ব
- ডেটা এনকোডিং: ক্লায়েন্ট যখন একটি বার্তা পাঠায়, তখন সেই বার্তাটি এনকোড করা হয়। এর ফলে ডেটা সিকিউর এবং আকারে ছোট হতে পারে, যা নেটওয়ার্কে দ্রুত পাঠানো সম্ভব হয়।
- ডেটা ডিকোডিং: সার্ভার বা ক্লায়েন্ট যখন ডেটা গ্রহণ করে, তখন তা ডিকোড করা হয়, অর্থাৎ পাঠানো বার্তাটি পুনরায় কার্যকরী ফরম্যাটে রূপান্তরিত করা হয়।
এনকোডিং এবং ডিকোডিং এর মাধ্যমে ডেটা নির্ভুল এবং দ্রুত স্থানান্তরিত হয়।
Web Sockets এ ডেটা এনকোডিং
Web Sockets প্রোটোকলটি মূলত দুটি ধরণের ডেটা এনকোডিং সমর্থন করে: টেক্সট (text) এবং বাইনারি (binary)।
১. টেক্সট এনকোডিং (Text Encoding)
Web Sockets প্রোটোকলে ডেটা সাধারণত স্ট্রিং আকারে পাঠানো হয়। যখন ক্লায়েন্ট একটি টেক্সট বার্তা পাঠায়, তখন তা UTF-8 এনকোডিং পদ্ধতিতে এনকোড করা হয়। এটি একটি স্ট্যান্ডার্ড ইউনিকোড এনকোডিং ফরম্যাট, যা বিভিন্ন ভাষার ক্যারেক্টার সঠিকভাবে প্রক্রিয়া করতে সক্ষম।
টেক্সট এনকোডিং এর উদাহরণ:
let socket = new WebSocket('wss://example.com/socket');
socket.onopen = function(event) {
let message = 'Hello, Server!';
socket.send(message); // UTF-8 এনকোডিং এর মাধ্যমে স্ট্রিং পাঠানো
};
এখানে, "Hello, Server!" বার্তাটি UTF-8 এনকোডিং এর মাধ্যমে সার্ভারে পাঠানো হবে।
২. বাইনারি এনকোডিং (Binary Encoding)
Web Sockets প্রোটোকলটি বাইনারি ডেটাও পাঠাতে পারে, যা সাধারণত বড় আকারের ডেটা, যেমন ছবির ফাইল বা ভিডিও স্ট্রিমের জন্য ব্যবহৃত হয়। দুটি সাধারণ বাইনারি ডেটা ফরম্যাট হলো:
- Blob: Blob হল একটি বাইনারি ডেটার স্টোরেজ ইউনিট, যা সাধারণত ছবি, অডিও, ভিডিও ইত্যাদি ধারণ করতে পারে।
- ArrayBuffer: এটি একটি জেনেরিক বাইনারি ডেটা কন্টেইনার, যা নির্দিষ্ট মেমরি পরিসরে বাইনারি ডেটা ধারণ করে।
বাইনারি এনকোডিং এর উদাহরণ:
let socket = new WebSocket('wss://example.com/socket');
socket.onopen = function(event) {
// একটি বাইনারি ArrayBuffer তৈরি করা
let binaryData = new ArrayBuffer(8);
socket.send(binaryData); // বাইনারি ডেটা পাঠানো
};
এখানে, একটি ArrayBuffer তৈরি করা হয়েছে, যা ৮ বাইটের বাইনারি ডেটা ধারণ করে এবং সেটি সার্ভারে পাঠানো হচ্ছে।
ডেটা ডিকোডিং
Web Sockets এর মাধ্যমে পাঠানো ডেটা যখন ক্লায়েন্ট বা সার্ভার গ্রহণ করে, তখন তা ডিকোড করা হয়। ডেটা ডিকোড করার মাধ্যমে পাঠানো বার্তাটি একটি ব্যবহারযোগ্য ফরম্যাটে রূপান্তরিত হয়, যেমন একটি স্ট্রিং বা JSON অবজেক্ট।
১. টেক্সট ডিকোডিং
যখন Web Socket থেকে টেক্সট বার্তা গ্রহণ করা হয়, তখন এটি সাধারণত একটি স্ট্রিং হিসেবে আসে, এবং কোনো ডিকোডিংয়ের প্রয়োজন পড়ে না, কারণ এটি আগেই UTF-8 এনকোডিংয়ে পাঠানো হয়েছিল।
টেক্সট ডিকোডিং এর উদাহরণ:
let socket = new WebSocket('wss://example.com/socket');
socket.onmessage = function(event) {
console.log('Received message: ' + event.data); // এখানে event.data সরাসরি স্ট্রিং
};
এখানে, event.data সোজাসুজি স্ট্রিং হিসেবে গ্রহণ করা হচ্ছে, কারণ এটি UTF-8 এনকোডিং থেকে ডিকোড করা হয়েছে।
২. বাইনারি ডেটা ডিকোডিং
যদি Web Socket কানেকশন দ্বারা বাইনারি ডেটা পাঠানো হয়, তবে সেটি অ্যারে বা Blob হিসেবে পাওয়া যায়, এবং পরে তা প্রয়োজন অনুযায়ী ডিকোড করা হয়।
বাইনারি ডেটা ডিকোডিং এর উদাহরণ:
let socket = new WebSocket('wss://example.com/socket');
socket.onmessage = function(event) {
let receivedData = event.data; // বাইনারি ডেটা (ArrayBuffer বা Blob)
// যদি এটি একটি ArrayBuffer হয়
let view = new DataView(receivedData);
console.log('Received binary data:', view.getInt8(0)); // প্রথম বাইটের মান প্রদর্শন
};
এখানে, বাইনারি ডেটা event.data থেকে ArrayBuffer হিসেবে গ্রহণ করা হচ্ছে, এবং পরে DataView ব্যবহার করে ডেটা ডিকোড করা হচ্ছে।
সারাংশ
Web Sockets প্রোটোকলে ডেটা এনকোডিং এবং ডিকোডিং একটি অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে, যা ডেটা দ্রুত এবং নির্ভুলভাবে ক্লায়েন্ট এবং সার্ভারের মধ্যে আদান-প্রদান করতে সহায়তা করে। টেক্সট ডেটা সাধারণত UTF-8 এনকোডিং ব্যবহার করে পাঠানো হয়, এবং বাইনারি ডেটা Blob বা ArrayBuffer হিসেবে পাঠানো হয়। ডেটা গ্রহণের সময়, এটি যথাযথভাবে ডিকোড করা হয় যাতে উভয় পক্ষ ডেটাকে সঠিকভাবে প্রক্রিয়া করতে পারে।
Read more