WebSocket একটি প্রোটোকল যা সাধারণ HTTP বা HTTPS সংযোগের মাধ্যমে শুরু হয়, কিন্তু একবার সংযোগ স্থাপন হলে এটি HTTP/HTTPS প্রোটোকলের সাথে সম্পর্কিত থাকেনা। এটি একটি আলাদা প্রোটোকল (ws:// বা wss://) হয়ে ওঠে। WebSocket প্রোটোকলটি মূলত HTTP হ্যান্ডশেকের মাধ্যমে শুরু হয়, তারপর সঠিক সার্ভার এবং ক্লায়েন্টের মধ্যে সরাসরি সংযোগ স্থাপিত হয়। HTTP/HTTPS এর মাধ্যমে WebSocket সংযোগ স্থাপনের প্রক্রিয়া নিচে বিস্তারিতভাবে আলোচনা করা হলো।
WebSocket সংযোগ স্থাপনের প্রক্রিয়া
- HTTP হ্যান্ডশেক (Upgrade Request)
- WebSocket সংযোগ স্থাপনের প্রথম ধাপ হচ্ছে HTTP রিকোয়েস্ট পাঠানো। ক্লায়েন্ট (ব্রাউজার) একটি সাধারণ HTTP রিকোয়েস্ট পাঠায়, যেখানে
Upgradeহেডার থাকে। এই রিকোয়েস্টের মাধ্যমে ক্লায়েন্ট সার্ভারকে জানায় যে, এটি একটি WebSocket কানেকশন শুরু করতে চাচ্ছে। - এটি HTTP 1.1 প্রোটোকলের মাধ্যমে করা হয় এবং সার্ভার যদি সেই রিকোয়েস্ট গ্রহণ করে, তবে এটি WebSocket সংযোগে পরিবর্তিত হবে।
- WebSocket সংযোগ স্থাপনের প্রথম ধাপ হচ্ছে HTTP রিকোয়েস্ট পাঠানো। ক্লায়েন্ট (ব্রাউজার) একটি সাধারণ HTTP রিকোয়েস্ট পাঠায়, যেখানে
- HTTP রিকোয়েস্টের মধ্যে যা থাকে:
- Upgrade:
websocket - Connection:
Upgrade - Sec-WebSocket-Key: একটি র্যান্ডম স্ট্রিং যা সার্ভারকে ক্লায়েন্টকে বৈধ WebSocket সংযোগ প্রদান করার জন্য ব্যবহৃত হয়।
- Sec-WebSocket-Version: WebSocket প্রোটোকলের সংস্করণ।
- Upgrade:
- HTTP 101: Switching Protocols
- সার্ভার যদি ক্লায়েন্টের রিকোয়েস্ট গ্রহণ করে, তবে এটি HTTP 101 (Switching Protocols) রেসপন্স পাঠায়। এটি জানান দেয় যে, WebSocket কানেকশন সফলভাবে তৈরি হয়েছে এবং HTTP প্রোটোকল থেকে WebSocket প্রোটোকলে চলে এসেছে।
- এর পরে, সার্ভার এবং ক্লায়েন্টের মধ্যে দুটি পক্ষই WebSocket প্রোটোকলে সরাসরি ডেটা আদান-প্রদান শুরু করতে পারে।
HTTP থেকে WebSocket সংযোগ স্থাপনের উদাহরণ
১. ক্লায়েন্ট (JavaScript):
HTML পৃষ্ঠায় ক্লায়েন্ট সাইডের জন্য WebSocket কানেকশন তৈরি করতে আপনি সাধারণ JavaScript ব্যবহার করতে পারেন। এটি HTTP/HTTPS রিকোয়েস্টের মাধ্যমে WebSocket সংযোগ স্থাপন করবে।
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebSocket Example</title>
</head>
<body>
<h1>WebSocket Client</h1>
<div id="messages"></div>
<input type="text" id="messageInput" placeholder="Type a message">
<button id="sendButton">Send Message</button>
<script>
// WebSocket কানেকশন তৈরি করা
const socket = new WebSocket('ws://localhost:8080'); // 'ws' HTTP থেকে WebSocket সংযোগ
// WebSocket সার্ভারের সাথে কানেকশন স্থাপিত হলে
socket.onopen = function() {
console.log('Connected to the WebSocket server.');
};
// সার্ভার থেকে মেসেজ পাওয়ার পর
socket.onmessage = function(event) {
const messagesDiv = document.getElementById('messages');
messagesDiv.innerHTML += `<p>Server: ${event.data}</p>`;
};
// ক্লায়েন্টের মেসেজ পাঠানোর জন্য
document.getElementById('sendButton').onclick = function() {
const message = document.getElementById('messageInput').value;
socket.send(message); // মেসেজ সার্ভারে পাঠানো
document.getElementById('messageInput').value = '';
};
</script>
</body>
</html>
এখানে, new WebSocket('ws://localhost:8080') এর মাধ্যমে HTTP থেকে WebSocket সংযোগ স্থাপন করা হচ্ছে। যদি আপনি HTTPS ব্যবহার করেন, তাহলে wss:// এর মাধ্যমে সংযোগ স্থাপন করবেন।
২. সার্ভার (Node.js):
এখানে Node.js ব্যবহার করে একটি WebSocket সার্ভার তৈরি করা হয়েছে, যা HTTP প্রোটোকলের মাধ্যমে WebSocket সংযোগ গ্রহণ করবে এবং পরবর্তীতে WebSocket প্রোটোকলে ডেটা আদান-প্রদান করবে।
// server.js
const WebSocket = require('ws');
const http = require('http');
// HTTP সার্ভার তৈরি করা
const server = http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('WebSocket server is running');
});
// WebSocket সার্ভার তৈরি করা
const wss = new WebSocket.Server({ server });
// WebSocket কানেকশনের জন্য ইভেন্ট হ্যান্ডলার
wss.on('connection', (ws) => {
console.log('A new client connected!');
// ক্লায়েন্টকে স্বাগতম বার্তা পাঠানো
ws.send('Welcome to the WebSocket server!');
// ক্লায়েন্ট থেকে মেসেজ পাওয়া গেলে
ws.on('message', (message) => {
console.log('Received: ' + message);
// সার্ভার থেকে রিপ্লাই পাঠানো
ws.send('Server received: ' + message);
});
// ক্লায়েন্ট ডিসকানেক্ট হলে
ws.on('close', () => {
console.log('A client disconnected.');
});
});
// HTTP সার্ভার চালু করা
server.listen(8080, () => {
console.log('HTTP server listening on port 8080');
});
এখানে ws লাইব্রেরির মাধ্যমে WebSocket সার্ভার তৈরি করা হয়েছে এবং এটি HTTP সার্ভারের সাথে মিলিত হয়ে কাজ করছে। প্রথমে HTTP কানেকশন তৈরি হচ্ছে এবং পরে WebSocket কানেকশনে পরিবর্তিত হচ্ছে।
HTTPS এ WebSocket সংযোগ
যদি আপনি সুরক্ষিত WebSocket সংযোগ (WSS) ব্যবহার করতে চান, তাহলে সার্ভার এবং ক্লায়েন্ট উভয়কেই HTTPS এবং WSS প্রোটোকল ব্যবহার করতে হবে। wss:// এর মাধ্যমে WebSocket কানেকশন স্থাপন করা হয়, যা TLS (Transport Layer Security) ব্যবহার করে সংযোগের নিরাপত্তা নিশ্চিত করে।
সার্ভার (HTTPS + WSS) উদাহরণ:
const fs = require('fs');
const https = require('https');
const WebSocket = require('ws');
// সার্ভার সনদপত্র (SSL Certificate) লোড করা
const server = https.createServer({
cert: fs.readFileSync('path_to_certificate.pem'),
key: fs.readFileSync('path_to_private_key.pem')
});
// WebSocket সার্ভার তৈরি করা
const wss = new WebSocket.Server({ server });
// WebSocket কানেকশনের জন্য ইভেন্ট হ্যান্ডলার
wss.on('connection', (ws) => {
console.log('A new client connected!');
ws.send('Welcome to the secure WebSocket server!');
});
// সার্ভার চালু করা
server.listen(8080, () => {
console.log('HTTPS server with WebSocket is running on wss://localhost:8080');
});
এখানে, https.createServer() ব্যবহার করে HTTPS সার্ভার তৈরি করা হচ্ছে, এবং wss:// এর মাধ্যমে সুরক্ষিত WebSocket কানেকশন স্থাপন করা হচ্ছে।
সারাংশ
WebSocket সংযোগ প্রথমে HTTP বা HTTPS প্রোটোকলের মাধ্যমে তৈরি হয়, যেখানে ক্লায়েন্ট একটি Upgrade রিকোয়েস্ট পাঠায়। যদি সার্ভার সেটি গ্রহণ করে, তখন এটি HTTP থেকে WebSocket প্রোটোকলে রূপান্তরিত হয়। এর মাধ্যমে রিয়েল-টাইম, ডুয়াল ডিরেকশনাল ডেটা আদান-প্রদান সম্ভব হয়। যদি সুরক্ষিত কানেকশন প্রয়োজন হয়, তবে HTTPS এবং WSS ব্যবহার করা হয়, যা নিরাপদভাবে ডেটা ট্রান্সফার নিশ্চিত করে।
Read more