Client এবং Server এর মধ্যে দুই-দিকের ডেটা আদান-প্রদান এমন একটি প্রক্রিয়া যেখানে ডেটা ক্লায়েন্ট থেকে সার্ভারে এবং সার্ভার থেকে ক্লায়েন্টে যেতে পারে, তা রিয়েল-টাইম এবং দ্বৈত দিকের (ডুয়াল-ডিরেকশনাল) যোগাযোগে ঘটে। এটি ওয়েব অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে যখন দ্রুত ইন্টারঅ্যাকশন এবং ডেটা আপডেট প্রয়োজন।
এটির বাস্তব উদাহরণ হিসেবে WebSockets, Socket.IO, এবং AJAX প্রযুক্তির ব্যবহার হয়।
1. WebSockets
WebSockets একটি প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে একটানা, পূর্ণ-ডুয়াল-ডিরেকশনাল যোগাযোগ স্থাপন করে। একবার কানেকশন স্থাপিত হলে, ক্লায়েন্ট এবং সার্ভার পরস্পর ডেটা আদান-প্রদান করতে পারে যেকোনো সময়, এটি HTTP এর চেয়ে অনেক দ্রুত এবং স্থিতিশীল।
উদাহরণ:
একটি ওয়েব চ্যাট অ্যাপ্লিকেশন যেখানে ব্যবহারকারী একটি মেসেজ পাঠায় এবং সার্ভার তা অবিলম্বে অন্য ব্যবহারকারীর স্ক্রীনে পাঠায়।
উদাহরণ কোড (JavaScript WebSockets):
// ক্লায়েন্ট সাইড WebSocket কানেকশন
var socket = new WebSocket("ws://localhost:3000");
socket.onopen = function() {
console.log("Connection established.");
socket.send("Hello Server!"); // ক্লায়েন্ট থেকে সার্ভারে ডেটা পাঠানো
};
socket.onmessage = function(event) {
console.log("Received from server: " + event.data); // সার্ভার থেকে ক্লায়েন্টে ডেটা গ্রহণ
};
// কানেকশন বন্ধ হলে
socket.onclose = function() {
console.log("Connection closed.");
};2. Socket.IO
Socket.IO একটি লাইব্রেরি যা WebSockets সহ অন্যান্য প্রযুক্তি ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে দুই-দিকের (ডুয়াল-ডিরেকশনাল) যোগাযোগ স্থাপন করে। এটি WebSockets এর উপর তৈরি হলেও, যদি WebSockets সমর্থিত না থাকে তবে এটি পোলিং প্রযুক্তি ব্যবহার করে কানেকশন স্থাপন করতে পারে। এর মাধ্যমে ইভেন্ট-ভিত্তিক ডেটা আদান-প্রদান করা সম্ভব।
উদাহরণ:
চ্যাট অ্যাপ্লিকেশন যেখানে ব্যবহারকারী একটি বার্তা পাঠায় এবং তা অন্য ব্যবহারকারীকে অবিলম্বে পৌঁছায়।
উদাহরণ কোড (Node.js with Socket.IO):
// সার্ভার সাইড (Node.js with Express and Socket.IO)
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
io.on('connection', (socket) => {
console.log('A user connected');
// ক্লায়েন্ট থেকে বার্তা গ্রহণ
socket.on('chat message', (msg) => {
console.log('Message: ' + msg);
// সার্ভার থেকে ক্লায়েন্টে বার্তা পাঠানো
io.emit('chat message', msg);
});
socket.on('disconnect', () => {
console.log('User disconnected');
});
});
server.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});ক্লায়েন্ট সাইড (HTML + JavaScript with Socket.IO):
<!DOCTYPE html>
<html>
<head>
<title>Socket.IO Chat</title>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
// বার্তা পাঠানো
function sendMessage() {
var message = document.getElementById('message').value;
socket.emit('chat message', message);
document.getElementById('message').value = '';
}
// সার্ভার থেকে বার্তা গ্রহণ করা
socket.on('chat message', function(msg) {
var node = document.createElement("LI");
var textnode = document.createTextNode(msg);
node.appendChild(textnode);
document.getElementById('messages').appendChild(node);
});
</script>
</head>
<body>
<h1>Socket.IO Chat</h1>
<ul id="messages"></ul>
<input id="message" autocomplete="off">
<button onclick="sendMessage()">Send</button>
</body>
</html>3. AJAX (Asynchronous JavaScript and XML)
AJAX প্রযুক্তি ওয়েব পেজের মধ্যে আনসিঙ্ক্রোনাস (Asynchronous) ডেটা আদান-প্রদান সম্ভব করে। AJAX শুধুমাত্র ক্লায়েন্ট সাইডে কাজ করে, যেখানে ক্লায়েন্ট সার্ভারে ডেটা পাঠায় এবং সার্ভার থেকে সাড়া পাওয়ার পর পেজ রিফ্রেশ না করে ডেটা আপডেট হয়। এটি দুই-দিকের যোগাযোগের জন্য ব্যবহৃত হলেও, এটি সাধারণত "request-response" পদ্ধতিতে কাজ করে।
উদাহরণ:
একটি সাইট যেখানে ব্যবহারকারী একটি পণ্য কিনলে, সেটি সিস্টেমে অবিলম্বে আপডেট হয়ে যায়।
উদাহরণ কোড (AJAX Request):
// AJAX মাধ্যমে ক্লায়েন্ট থেকে সার্ভারে ডেটা পাঠানো
function sendData() {
var xhr = new XMLHttpRequest();
xhr.open("POST", "server_url", true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({ productId: 123, quantity: 1 }));
// সার্ভার থেকে রেসপন্স গ্রহণ করা
xhr.onload = function() {
if (xhr.status === 200) {
console.log("Server response:", xhr.responseText);
}
};
}4. HTTP/2 (Bidirectional Streams)
HTTP/2 উন্নত HTTP প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে দুটি দিকের ডেটা আদান-প্রদান সমর্থন করে। HTTP/2-তে, streaming এবং server push এর মাধ্যমে ডেটা একাধিক অ্যাক্সেস পয়েন্টে পাঠানো সম্ভব।
সারসংক্ষেপ
- WebSockets এবং Socket.IO দুটি শক্তিশালী প্রযুক্তি যা ক্লায়েন্ট এবং সার্ভারের মধ্যে রিয়েল-টাইম, ডুয়াল-ডিরেকশনাল যোগাযোগে ব্যবহৃত হয়।
- AJAX সাধারণত ক্লায়েন্ট থেকে সার্ভারে ডেটা পাঠানোর জন্য ব্যবহৃত হয় এবং এটি "request-response" ভিত্তিতে কাজ করে।
- HTTP/2 এ দুটি দিকের ডেটা আদান-প্রদান এবং streaming সুবিধা প্রদান করে।
এগুলো সবই আধুনিক ওয়েব অ্যাপ্লিকেশনগুলিতে গুরুত্বপূর্ণ ভূমিকা পালন করে, যেখানে ডেটার দ্রুত এবং স্থিতিশীল আদান-প্রদান প্রয়োজন।
Read more