WebSocket

হলো এমন একটি টেকনোলজি যার মাধ্যমে একটি ওয়েব ব্রাউজার এবং একটি সার্ভারের মধ্যে সারাক্ষণ খোলা থাকে এমন একটি দ্বিমুখী (Two-way) যোগাযোগ পথ তৈরি হয়।

WebSocket-এর মূল বৈশিষ্ট্যসমূহ

  1. বিরামহীন সংযোগ (Persistent Connection): একবার কানেকশন তৈরি হয়ে গেলে সেটি বন্ধ হয় না (যতক্ষণ না কেউ নিজে থেকে বন্ধ করে)। ফলে প্রতিবার নতুন করে রিকোয়েস্ট পাঠানোর প্রয়োজন পড়ে না।

  2. দ্বিমুখী যোগাযোগ (Full-Duplex): ক্লায়েন্ট এবং সার্ভার—উভয়ই যেকোনো সময় একে অপরকে ডাটা পাঠাতে পারে। সার্ভারকে আর ক্লায়েন্টের রিকোয়েস্টের জন্য অপেক্ষা করতে হয় না।

  3. খুবই দ্রুত (Low Latency): যেহেতু কানেকশন আগে থেকেই তৈরি থাকে, তাই ডাটা আদান-প্রদানে একদমই সময় লাগে না। এটি রিয়েল-টাইম কাজের জন্য আদর্শ।

এটি কীভাবে কাজ করে? (The Handshake)

  1. WebSocket শুরু হয় একটি সাধারণ HTTP রিকোয়েস্টের মাধ্যমে, কিন্তু এটি দ্রুত নিজেকে বদলে ফেলে। প্রক্রিয়াটি অনেকটা এরকম:

  2. Handshake: ব্রাউজার সার্ভারকে একটি বিশেষ HTTP রিকোয়েস্ট পাঠায় এবং বলে— “ভাই, আমি কি প্রোটোকলটা বদলে WebSocket করতে পারি?” (একে বলা হয় Upgrade হেডার)।

  3. Switching: সার্ভার যদি রাজি থাকে, তবে সে একটি 101 Switching Protocols রেসপন্স পাঠায়।

  4. Open Connection: ব্যস! এখন আর HTTP নেই। এখন তাদের মধ্যে একটি সরাসরি পাইপলাইনের মতো কানেকশন তৈরি হয়ে গেল। এখন তারা ইচ্ছেমতো ডাটা চালাচালি করতে পারবে।

WebSocket কেন ব্যবহার করবেন? (Real-life Use Cases) আপনি যখন নিচের অ্যাপ্লিকেশনগুলো ব্যবহার করেন, তখন পর্দার আড়ালে প্রায়ই WebSocket কাজ করে:


Polling কী? (The Traditional Way)

সহজ ভাষায়, Polling হলো ক্লায়েন্ট (যেমন আপনার ব্রাউজার) বারবার সার্ভারকে গিয়ে জিজ্ঞেস করা— "নতুন কোনো মেসেজ আছে? নতুন কোনো ডাটা আছে?

Polling-এর প্রকারভেদ

পোলিং মূলত দুই ধরণের হয়ে থাকে:

  1. Short Polling ব্রাউজার একটা নির্দিষ্ট সময় পর পর (যেমন প্রতি ২ সেকেন্ডে) সার্ভারকে রিকোয়েস্ট পাঠায়।

সমস্যা: সার্ভারে ডাটা না থাকলেও রিকোয়েস্ট যাচ্ছে, যা ব্যান্ডউইথ এবং সার্ভারের রিসোর্স নষ্ট করে।

  1. Long Polling এটি একটু স্মার্ট। ব্রাউজার রিকোয়েস্ট পাঠায়, কিন্তু সার্ভার সাথে সাথে উত্তর দেয় না। সার্ভার রিকোয়েস্টটা ধরে রাখে যতক্ষণ না নতুন কোনো ডাটা আসে। ডাটা আসার সাথে সাথে সার্ভার রেসপন্স পাঠায় এবং কানেকশন ক্লোজ করে দেয়। এরপর ব্রাউজার আবার নতুন রিকোয়েস্ট পাঠায়।

সমস্যা: এটি শর্ট পোলিংয়ের চেয়ে ভালো হলেও প্রতিবার নতুন করে কানেকশন তৈরি করতে হয়, যা বেশ ব্যয়বহুল।


HTTP এবং HTTPS কী?

এগুলো হলো ইন্টারনেটে কথা বলার ভাষা বা নিয়ম (Protocol)।

  1. HTTP (HyperText Transfer Protocol): এটি হলো ক্লায়েন্ট (আপনার ব্রাউজার) এবং সার্ভারের মধ্যে ডাটা আদান-প্রদানের মূল নিয়ম। তবে এটি “Plain Text”-এ ডাটা পাঠায়। মাঝপথে কেউ চাইলে আপনার ডাটা চুরি করে পড়ে ফেলতে পারে।

  2. HTTPS (HyperText Transfer Protocol Secure): এটি HTTP-এর একটি নিরাপদ সংস্করণ। এখানে SSL/TLS নামক একটি সিকিউরিটি লেয়ার থাকে যা আপনার ডাটাকে এনক্রিপ্ট (Lock) করে দেয়। ফলে হ্যাকাররা ডাটা পেলেও তা পড়তে পারে না।

Header (হেডার) কী এবং এটি কী করে?

হেডার হলো রিকোয়েস্ট বা রেসপন্সের সাথে পাঠানো অতিরিক্ত তথ্য।

মনে করো, তুমি কাউকে একটা পার্সেল পাঠাবে। পার্সেলের ভেতর যা আছে সেটা হলো Data, আর পার্সেলের গায়ে লাগানো লেবেল (যেখানে লেখা আছে কার কাছে যাবে, ওজন কত, ভেতরে কী ধরণের জিনিস আছে) হলো Header।

হেডারের কাজ:

  1. Identity: ব্রাউজার কোন ভার্সন ব্যবহার করছে তা জানানো (User-Agent)।

  2. Content Type: ডাটা কি ফরম্যাটে আছে (যেমন: JSON, HTML না কি Image) তা জানানো।

  3. Authentication: ইউজার লগইন করা কি না তা যাচাই করার জন্য টোকেন পাঠানো।

  4. WebSocket Upgrade: WebSocket শুরু করার জন্য ব্রাউজার এই হেডারের মাধ্যমেই বলে, “আমি কানেকশনটা আপগ্রেড করতে চাই”।

ডাটা কীভাবে পাঠায়? (Request & Response Cycle)

HTTP-তে ডাটা আদান-প্রদান হয় চারটি প্রধান পদ্ধতিতে (এগুলোকে Verbs বা Methods বলে):

ডাটা পাঠানোর প্রক্রিয়া (ধাপে ধাপে)

যখন তুমি ব্রাউজারে google.com লিখে এন্টার দাও, তখন পর্দার আড়ালে যা ঘটে:

WebSocket-এর সাথে এর সম্পর্ক কী?

WebSocket শুরু হওয়ার সময় একটি বিশেষ HTTP GET রিকোয়েস্ট পাঠায় যেটার হেডারে লেখা থাকে:

সার্ভার যদি এটা গ্রহণ করে, তবে সে 101 Switching Protocols রেসপন্স দেয়। এরপর আর কোনো HTTP রিকোয়েস্ট-রেসপন্স চলে না, সরাসরি ডাটা আদান-প্রদান শুরু হয়।


HTTPS-এর ‘S’ (SSL/TLS) কী?

HTTPS মানে হলো Hypertext Transfer Protocol Secure। এই 'S' আসে SSL (Secure Sockets Layer) অথবা তার আধুনিক সংস্করণ TLS (Transport Layer Security) থেকে।

সহজ কথায়, SSL/TLS হলো একটা ডিজিটাল তালা (Encryption)।

কেন ব্যবহার করা লাগে?

এর প্রধান কাজ ৩টি:

এই SSL/TLS সার্টিফিকেট আসে কই থেকে?

সার্ভার মালিককে একটি CA (Certificate Authority)-র কাছ থেকে সার্টিফিকেট কিনতে হয় বা নিতে হয়।

HTTP থেকে HTTPS-এ আপগ্রেড হয় কীভাবে?

সার্ভার সাইডে এর কনফিগারেশন করা হয়। সাধারণত ৩টি ধাপে এটি ঘটে:

নেটওয়ার্কিংয়ের সাথে এর কানেকশন কী?

নেটওয়ার্কিংয়ের ভাষায় বললে, আমাদের OSI Model বুঝতে হবে।


Handshake

"Handshake" শব্দটা শুনলেই আমাদের চোখের সামনে দুজন মানুষের হাত মেলানোর দৃশ্য ভেসে ওঠে। নেটওয়ার্কিংয়ের ক্ষেত্রেও এর অর্থ অনেকটা একই—দুটো ডিভাইস (ব্রাউজার এবং সার্ভার) একে অপরের সাথে কথা বলা শুরু করার আগে কিছু শর্ত এবং নিয়ম ঠিক করে নেয়।

TLS Handshake কী এবং কেন দরকার?

যখন আমরা বলি "Handshake হচ্ছে", তখন আসলে ব্রাউজার এবং সার্ভার তিনটি প্রধান কাজ নিশ্চিত করে:

না করলে কী সমস্যা? যদি হ্যান্ডশেক না হতো, তবে আপনার পাঠানো ডাটা (যেমন পাসওয়ার্ড) ইন্টারনেটের তারের মধ্য দিয়ে যাওয়ার সময় যে কেউ “Packet Sniffing” করে দেখে ফেলতে পারতো। হ্যান্ডশেক ডাটাকে অদৃশ্য বা হিজিবিজি করে দেয়।

হ্যান্ডশেকের ধাপগুলো (Step-by-Step Process)

এই পুরো প্রসেসটি মিলিসেকেন্ডের মধ্যে ঘটে। এখানে দেখলে তোমার বুঝতে সুবিধা হবে। ধাপগুলো নিচে দেওয়া হলো:

এসিম্যাট্রিক বনাম সিমেট্রিক এনক্রিপশন (মূল নেটওয়ার্কিং রহস্য)

হ্যান্ডশেকের সময় দুই ধরণের এনক্রিপশন কাজ করে:

হ্যান্ডশেক না হলে কী হতো? (The Danger)

যদি হ্যান্ডশেক বা TLS না থাকতো, তবে নিচের অ্যাটাকগুলো খুব সহজে হতো:

WebSocket-এর ক্ষেত্রেও ঠিক একইভাবে প্রথমে একটি HTTP/HTTPS হ্যান্ডশেক হয়, তারপর সেটি WebSocket Connection-এ বদলে যায়।


ব্রাউজারের কাছে আগে থেকে কী থাকে?

তুমি যখন ক্রোম বা ফায়ারফক্স ইন্সটল করো, তখন তার ভেতরে অনেকগুলো Cipher Suites (অ্যালগরিদমের সেট) আগে থেকেই দেওয়া থাকে।

Cipher Suite-এ মূলত ৪টি জিনিস থাকে:

ব্রাউজার যখন বলে "Hello", সে আসলে তার কাছে থাকা এই লিস্টটা সার্ভারকে পাঠিয়ে দেয়। সার্ভার সেই লিস্ট থেকে যেটা তার কাছে সবচেয়ে শক্তিশালী মনে হয়, সেটা বেছে নেয়।

TLS আসলে কী? (The Invisible Guard)

TLS (Transport Layer Security) হলো SSL-এর আধুনিক এবং অনেক বেশি শক্তিশালী ভার্সন। এটি কোনো অ্যাপ বা সফটওয়্যার না, এটি একটি প্রোটোকল বা নিয়ম।

এর কাজ হলো ইন্টারনেটে ডাটা চলাচলের জন্য একটি এনক্রিপ্টেড টানেল (Tunnel) তৈরি করা।

পাবলিক কী (Public Key) এবং প্রাইভেট কী (Private Key) -র রহস্য

এখানেই নেটওয়ার্কিংয়ের সবচেয়ে ইন্টারেস্টিং পার্ট। এটাকে বলে Asymmetric Encryption।

কল্পনা করো একটা বিশেষ ধরণের তালা এবং চাবি:

হ্যান্ডশেকের সেই মুহূর্ত (The “Secret” Exchange)

"ক্লায়েন্ট একটা গোপন চাবি (Session Key) তৈরি করে পাঠায়"—সেখানে একটা সূক্ষ্ম ব্যাপার আছে:

ফলাফল: এখন ব্রাউজার আর সার্ভার—দুজনের কাছেই একটা গোপন “র‍্যান্ডম ডাটা” চলে এলো। এই ডাটা থেকেই তৈরি হয় Session Key। এরপর থেকে আর পাবলিক-প্রাইভেট কি লাগে না, এই একটা চাবি দিয়েই তালা খোলা আর লাগানো হয় (Symmetric Encryption)।

যদি হ্যান্ডশেক না হতো? (The Security Gap)

যদি এই প্রসেস না থাকতো:

HTTP Status Codes

  1. ১০০ - ১৯৯: Information (তথ্যমূলক) সার্ভার বলছে: “তোমার রিকোয়েস্ট পেয়েছি, কাজ চলছে।” * 101 Switching Protocols: এটা WebSocket-এর জন্য সবচেয়ে গুরুত্বপূর্ণ। যখন ব্রাউজার বলে আমি WebSocket হতে চাই, সার্ভার রাজি হলে এই ১০১ কোডটা দেয়।

  2. ২০০ - ২৯৯: Success (সফলতা) সার্ভার বলছে: "সব ঠিক আছে! কাজ হয়ে গেছে।"

  1. ৩০০ - ৩৯৯: Redirection (রাস্তা পরিবর্তন) সার্ভার বলছে: "তুমি যেটা খুঁজছো সেটা এখানে নেই, অন্য ঠিকানায় যাও।"
  1. ৪০০ - ৪৯৯: Client Error (তোমার ভুল) সার্ভার বলছে: "তুমি ভুল কিছু পাঠিয়েছো, আমি এটা করতে পারবো না।"
  1. ৫০০ - ৫৯৯: Server Error (সার্ভারের ভুল) সার্ভার বলছে: "সরি ভাই! আমার নিজের সিস্টেমে কোনো গণ্ডগোল হয়েছে।"

ws:// বনাম wss:// (The Difference)

যেমন HTTP এবং HTTPS আছে, ঠিক তেমনি WebSocket-এরও দুটি ভার্সন আছে:

প্রো টিপ: রিয়েল অ্যাপ্লিকেশনে সব সময় wss:// ব্যবহার করা উচিত, কারণ এটি প্রক্সি এবং ফায়ারওয়াল খুব সহজে পার করতে পারে।

WebSocket Architecture (কীভাবে কাজ করে?)

WebSocket আর্কিটেকচার মূলত তিনটি ধাপে কাজ করে:

  1. হ্যান্ডশেক (Handshake) ক্লায়েন্ট (ব্রাউজার) একটি HTTP রিকোয়েস্ট পাঠায় সার্ভারের কাছে। এই রিকোয়েস্টে দুটি বিশেষ হেডার থাকে:

Upgrade: websocket

Connection: Upgrade

  1. বাইডাইরেকশনাল কানেকশন (Bidirectional) সার্ভার যদি রাজি হয়, তবে সে 101 Switching Protocols রেসপন্স দেয়। এখন HTTP পাইপলাইনটি একটি WebSocket পাইপলাইনে পরিণত হয়। এখন ক্লায়েন্ট এবং সার্ভার দুজনেই ডাটা পাঠাতে পারে।

  2. ডাটা ফ্রেম (Data Frames) HTTP-তে যেমন বড় বড় মেসেজ পাঠানো হয়, WebSocket-এ ডাটা ছোট ছোট “Frames” আকারে পাঠানো হয়। এতে ব্যান্ডউইথ কম খরচ হয়।

Ghost Connection (জম্বি কানেকশন) কী?

এটি WebSocket-এর একটি অদ্ভুত এবং বিরক্তিকর সমস্যা।

Ghost Connection হলো এমন একটি অবস্থা যেখানে:

কেন হয়? WebSocket একটি সারাক্ষণ খোলা থাকা কানেকশন। যদি কোনো কারণে ক্লায়েন্ট প্রপারলি “Close” মেসেজ না পাঠিয়েই ডিসকানেক্ট হয়ে যায় (যেমন: হঠাৎ ওয়াইফাই বন্ধ হয়ে গেলে), সার্ভার অনেক সময় বুঝতে পারে না যে ওই ইউজার আর নেই। ফলে সার্ভারের রিসোর্স নষ্ট হতে থাকে।

এটি কীভাবে সমাধান করা হয়? (Heartbeat/Ping-Pong) সার্ভার আর ক্লায়েন্টের মধ্যে একটি "হার্টবিট" মেকানিজম রাখা হয়:

  1. কেন WebSocket আর্কিটেকচার সেরা?

Buffer (বাফার) কী?

সহজ কথায়, Buffer হলো মেমোরির একটি নির্দিষ্ট জায়গা যেখানে সাময়িকভাবে কিছু ডাটা রাখা হয়।

বাস্তব উদাহরণ: ইউটিউবে যখন ভিডিও দেখো, তখন দেখবে ভিডিওর লাল দাগের আগে একটা হালকা ধূসর (gray) রঙের দাগ এগিয়ে যায়। ওটাই হলো Buffering। তার মানে হলো, তোমার ইন্টারনেট থেকে ভিডিওর ডাটাগুলো এসে আগে মেমোরির একটা ‘বালতি’ বা ‘Buffer’-এ জমা হচ্ছে, তারপর সেখান থেকে প্লেয়ার ভিডিওটি দেখাচ্ছে।

ArrayBuffer কী?

ArrayBuffer হলো ব্রাউজারের (Client-side) কনসেপ্ট। এটি মেমোরির একটি নির্দিষ্ট অংশ যেখানে বাইনারি ডাটা জমা থাকে।

তবে একটা টুইস্ট আছে: তুমি ArrayBuffer সরাসরি পড়তে বা এডিট করতে পারবে না। এটা শুধু একটা মেমোরি ব্লক। এই ডাটা দেখার জন্য তোমার একটা চশমা লাগবে, যাকে বলা হয় View (যেমন: Uint8Array, Float32Array)।

ডাটা আসলে কীভাবে যায়? (The Transfer Process)

যখন তুমি WebSocket বা নেটওয়ার্ক দিয়ে ডাটা পাঠাও, তখন ডাটা আসলে Electrical Signal বা Light Pulse হিসেবে যায়। প্রক্রিয়াটি এরকম:

JSON বনাম Buffer: কোনটা কখন?

  1. WebSocket-এ এটি কীভাবে কাজ করে? WebSocket-এ তুমি যখন socket.send(data) করো, তখন তুমি দুইভাবে ডাটা পাঠাতে পারো:

ডাটা হলো মালামাল, আর Buffer হলো সেই মালামাল রাখার গোডাউন। নেটওয়ার্ক দিয়ে যখন পাঠাতে হয়, তখন সেই মালামালকে ছোট ছোট বক্সে (Packets) ভরে তারের মধ্য দিয়ে পাঠানো হয়।


JSON নাকি Binary?

WebSocket-এ ডাটা পাঠানোর সময় মূলত দুটি রাস্তা আছে:

প্রশ্ন হলো—WebSocket কীভাবে বোঝে যে কোনটা টেক্সট আর কোনটা বাইনারি? এখানেই আসে Opcode।

  1. Opcode কী? (Operation Code) WebSocket যখন ডাটা পাঠায়, সে ডাটাকে ছোট ছোট Frames-এ ভাগ করে। প্রতিটি ফ্রেমের শুরুতে একটা ছোট্ট অংশ থাকে যা বলে দেয় ওই ফ্রেমের ভেতর কী আছে এবং সেটা নিয়ে কী করতে হবে। এই অংশটিকেই বলে Opcode।

এটি ৪-বিটের একটি সংখ্যা। সাধারণ কিছু Opcode হলো:

  1. Opcode কেন এবং কখন ব্যবহার হয়?

এটি মূলত নিচুতলার (Low-level) প্রোটোকল ম্যানেজমেন্টের জন্য ব্যবহৃত হয়।

  1. WebSocket-এর সাথে এর কানেকশন কী?

WebSocket-এর পুরো আর্কিটেকচার দাঁড়িয়ে আছে এই Framing-এর ওপর।

  1. সহজ উদাহরণ (Real-world Analogy)

মনে করো, তুমি কুরিয়ার সার্ভিসে দুটো বক্স পাঠাবে।

এখানে ওই ছোট লেখাটাই হলো Opcode, যা কুরিয়ারম্যানকে (সার্ভারকে) বলে দিচ্ছে ভেতরের জিনিসটা (Data) কী এবং ওটা নিয়ে কী করতে হবে।


ArrayBuffer (আসল মেমোরি ব্লক)

এটি হলো মেমোরির একটি ফিক্সড সাইজের ব্লক। এটা অনেকটা একটা খালি গুদামের মতো। এখানে শুধু বাইনারি ডাটা (০ আর ১) থাকে।

  1. TypedArray (ডাটা পড়ার চশমা)

যেহেতু আপনি ArrayBuffer সরাসরি পড়তে পারেন না, তাই আপনার একটা মাধ্যম দরকার। TypedArray হলো সেই মাধ্যম। এটি একটি ArrayBuffer-এর ওপর লেয়ার হিসেবে কাজ করে।

মনে করুন, আপনার গুদামে অনেকগুলো ছোট ছোট বক্স আছে। এখন আপনি সেগুলো কীভাবে গুনবেন?

  1. Buffer (Node.js স্পেশাল)

Buffer হলো মূলত Node.js-এর একটি ফিচার। ব্রাউজারে যেমন ArrayBuffer আছে, Node.js-এ ডাটা হ্যান্ডেল করার জন্য আছে Buffer।


একটি উদাহরণের মাধ্যমে দেখা যাক

ধরুন, আপনার কাছে ৮ বাইটের একটা ডাটা আছে।

// ১. একটা ৮ বাইটের খালি গুদাম তৈরি করলাম
let bufferStorage = new ArrayBuffer(8);

// ২. এখন এটা পড়ার জন্য ৮-বিটের চশমা পরলাম
let view = new Uint8Array(bufferStorage);

// ৩. ডাটা লিখলাম
view[0] = 255;
console.log(view); // [255, 0, 0, 0, 0, 0, 0, 0]

এখানে bufferStorage হলো গুদাম (ArrayBuffer), আর view হলো আপনার চশমা (TypedArray)। আর যদি আপনি Node.js-এ থাকতেন, তবে সরাসরি Buffer.from([255]) দিয়েই কাজ সেরে ফেলতে পারতেন।

WebSocket-এর সাথে এদের কানেকশন কী?

যখন WebSocket দিয়ে কোনো ইমেজ বা ফাইল আসে:


Backpressure

Backpressure হলো এমন একটি অবস্থা যখন ডাটা আসার গতি (Producer speed) ডাটা প্রসেস করার গতির (Consumer speed) চেয়ে অনেক বেশি হয়ে যায়।

  1. WebSocket-এ Backpressure কেন হয়? WebSocket হলো একটি Continuous Stream। এখানে ডাটা আসতেই থাকে। সমস্যাটা তখন হয় যখন:

যেহেতু WebSocket কানেকশনটি খোলা থাকে, তাই এই নাতি-প্রসেস হওয়া ডাটাগুলো মেমোরিতে (Buffer) জমা হতে থাকে। একটা সময় মেমোরি ফুল হয়ে ব্রাউজার বা অ্যাপ হ্যাং করে। এটাই হলো Backpressure সমস্যা।

  1. এটি কী কাজ করে এবং কেন ব্যবহার করা হয়? Backpressure-এর কাজ হলো ব্রেক কষানো। এটি নিশ্চিত করে যে:
  1. Backpressure মূলত ৩টি বিষয়ের সাথে সরাসরি সম্পর্কিত:
  1. কীভাবে এটি সমাধান করা হয়? ডেভেলপার হিসেবে আমরা সাধারণত এই ৩টি পদ্ধতি ব্যবহার করি:

alt text

alt text

alt text

alt text


Zombie বা Ghost Server

নেটওয়ার্কিংয়ের ভাষায় "জম্বি" অবস্থা তৈরি হয় যখন প্রসেস বা কানেকশনটি তার কাজ শেষ করেছে, কিন্তু অপারেটিং সিস্টেম এখনো তাকে মেমোরি থেকে মুছে ফেলেনি।

WebSocket-এ কেন হয়? যেহেতু WebSocket একটি Persistent (স্থায়ী) কানেকশন, তাই ক্লায়েন্ট যদি হুট করে পিসি বন্ধ করে দেয় বা ইন্টারনেট চলে যায়, সার্ভারের অপারেটিং সিস্টেম সাথে সাথে বুঝতে পারে না যে ওই ইউজার আর নেই।

Memory Leakage কেন হয়?

WebSocket-এ মেমোরি লিক হওয়ার প্রধান কারণ হলো "Ghost/Zombie Connections"।

Load Balancing-এর জটিলতা

HTTP-র লোড ব্যালেন্সিং সহজ, কিন্তু WebSocket-এ এটি বেশ ঝামেলার কারণ এখানে Sticky Session লাগে।

হরিজন্টাল স্কেলিং এবং Redis-এর দরকার কেন?

যখন ইউজার সংখ্যা অনেক বেড়ে যায়, তখন তুমি একটা সার্ভার দিয়ে কাজ চালাতে পারবে না। তোমাকে ২-৩টা সার্ভার চালাতে হবে। কিন্তু এখানে একটা বিশাল লজিক্যাল সমস্যা আছে:


Unicast (একজনের সাথে কথা বলা)

যখন একজন সেন্ডার (Sender) সরাসরি একজন নির্দিষ্ট রিসিভারকে (Receiver) ডাটা পাঠায়, তখন তাকে বলা হয় Unicast।

Broadcast (সবার সাথে কথা বলা)

যখন একজন সেন্ডার নেটওয়ার্কের ভেতরে থাকা সবাইকে একসাথে মেসেজ পাঠায়, তাকে বলা হয় Broadcast।

Multicast (একটি নির্দিষ্ট গ্রুপের সাথে কথা বলা)

যখন একজন সেন্ডার সবার কাছে না পাঠিয়ে শুধু একটি নির্দিষ্ট গ্রুপের (Group/Room) কাছে মেসেজ পাঠায়, তাকে বলা হয় Multicast।


WebRTC কী? (Real-Time Communication)

alt text

WebRTC হলো একটি ওপেন-সোর্স প্রোটোকল যা ব্রাউজারগুলোকে একে অপরের সাথে সরাসরি (Peer-to-Peer বা P2P) অডিও, ভিডিও এবং ডাটা শেয়ার করার ক্ষমতা দেয়। এতে মাঝখানে কোনো থার্ড-পার্টি সার্ভারের প্রয়োজন হয় না (একবার কানেকশন হয়ে গেলে)।

  1. এটি কোথায় ব্যবহার করা হয়? তুমি প্রতিদিন যে অ্যাপগুলো ব্যবহার করো, তার অনেকগুলোই WebRTC-তে চলে:

alt text

  1. কেন এটি ব্যবহার করা হয়? (WebSocket বনাম WebRTC) তুমি ভাবতে পারো, "ভাই, WebSocket দিয়েও তো অডিও-ভিডিও পাঠানো যায়, তাহলে WebRTC কেন?" এর ৩টি বড় কারণ আছে:
  1. WebRTC মূলত ৪টি জিনিসের সমন্বয়ে কাজ করে:

WebSocket: ক্লায়েন্ট <--> সার্ভার (ডাটা সেভ করা এবং ছোট মেসেজের জন্য)।

WebRTC: ক্লায়েন্ট <--> ক্লায়েন্ট (অডিও, ভিডিও এবং বিশাল ফাইল শেয়ারের জন্য)।

UDP (User Datagram Protocol)

নেটওয়ার্কিংয়ের দুনিয়ায় ডাটা আদান-প্রদান করার জন্য মূলত দুটি প্রধান রাস্তা বা প্রোটোকল আছে— একটি হলো TCP (যেটার ওপর WebSocket চলে), আর অন্যটি হলো UDP (যেটার ওপর WebRTC চলে)।

সহজ কথায়, UDP (User Datagram Protocol) হলো একটি স্পিড-ফোকাসড প্রোটোকল। এটি ডাটা পাঠানোর আগে কানেকশন তৈরি করা বা ডাটা ঠিকঠাক পৌঁছালো কি না, তা নিয়ে একদম চিন্তা করে না।

  1. UDP কী এবং কেন আলাদা? UDP-কে বলা হয় "Fire and Forget" প্রোটোকল। এটি ডাটা ছুড়ে মারে এবং ভুলে যায়।

TCP বনাম UDP এর তুলনা

বৈশিষ্ট্য TCP (Transmission Control Protocol) UDP (User Datagram Protocol)
ধরন কানেকশন-ওরিয়েন্টেড (আগে কথা বলে লাইন ঠিক করে)। কানেকশন-লেস (সরাসরি ডাটা পাঠিয়ে দেয়)।
নির্ভরযোগ্যতা ১০০% গ্যারান্টি দেয় যে ডাটা পৌঁছাবেই। কোনো গ্যারান্টি নেই।
অর্ডার ডাটা সিরিয়াল অনুযায়ী পৌঁছায় (১, ২, ৩…)। ডাটা এলোমেলো পৌঁছাতে পারে।
ব্যবহার WebSocket, HTTP, Email, ফাইল ট্রান্সফার। WebRTC, লাইভ ভিডিও কল, অনলাইন গেম।
  1. UDP ছাড়াও কি আরও কিছু আছে? হ্যাঁ, নেটওয়ার্কিংয়ের বিভিন্ন লেয়ারে আরও অনেক প্রোটোকল আছে।

QUIC (Google-এর তৈরি)

ICMP (Internet Control Message Protocol)

SCTP (Stream Control Transmission Protocol)


OSI মডেলের ৭টি লেয়ার

OSI মডেল এবং প্রজেক্ট কানেকশন

লেয়ার নম্বর লেয়ারের নাম কাজ কী? তোমার প্রজেক্টের সাথে কানেকশন
Application ইউজার যেখানে কাজ করে। তোমার ব্রাউজার বা ws লাইব্রেরি।
Presentation ডাটা ফরম্যাট করা (যেমন: JSON বা Encryption)। তোমার সেই JSON.stringify() করা।
Session কানেকশন খোলা এবং বন্ধ রাখা। WebSocket হ্যান্ডশেক এবং সেশন ম্যানেজমেন্ট।
Transport ডাটা কীভাবে যাবে (নিশ্চিত নাকি দ্রুত?)। এখানেই থাকে TCP এবং UDP।
Network ডাটা কোন পথে (IP Address) যাবে। রাউটার এবং আইপি অ্যাড্রেস।
Data Link ফিজিক্যাল অ্যাড্রেস (MAC)। তোমার পিসির নেটওয়ার্ক কার্ড।
Physical তার বা সিগন্যাল (০ আর ১)। ওয়াইফাই বা ল্যান ক্যাবল।

Server-Sent Events (SSE)

SSE হলো এমন একটি টেকনোলজি যেখানে সার্ভার থেকে ক্লায়েন্টের কাছে ডাটা একতরফাভাবে (One-way) অনবরত প্রবাহিত হয়।

alt text

  1. SSE কীভাবে কাজ করে?
  1. SSE কোথায় ব্যবহার করবে? যেসব জায়গায় ক্লায়েন্টের পক্ষ থেকে বারবার কিছু পাঠানোর দরকার নেই, শুধু সার্ভারের আপডেট দরকার, সেখানে SSE সেরা। যেমন:

WebTransport

এটি একটি নতুন ওয়েব এপিআই (API) যা HTTP/3 এবং QUIC প্রোটোকলের ওপর ভিত্তি করে চলে। এটি ব্রাউজার এবং সার্ভারের মধ্যে অত্যন্ত দ্রুত এবং কম ল্যাটেন্সিতে ডাটা আদান-প্রদান করতে পারে।

আধুনিক ওয়েব প্রোটোকল তুলনা

বৈশিষ্ট্য WebSocket WebRTC WebTransport
প্রোটোকল TCP UDP (P2P) QUIC (HTTP/3)
কানেকশন Client-Server Peer-to-Peer Client-Server
স্পিড ভালো সুপার ফাস্ট সুপার ফাস্ট
ব্যবহার চ্যাট, নোট অ্যাপ ভিডিও কল গেমিং, লাইভ স্ট্রিমিং

এটি কোথায় ব্যবহার করা হয়?


  1. WebSocket (WS) কখন বেছে নেবে? এটি রিয়েল-টাইম অ্যাপের জন্য “ডিফল্ট” চয়েস।

সিনারিও: টু-ওয়ে (Bi-directional) কমিউনিকেশন দরকার। অর্থাৎ ক্লায়েন্ট এবং সার্ভার দুজনেই যখন খুশি কথা বলবে।

উদাহরণ:

  1. WebRTC কখন বেছে নেবে? যখন সার্ভারকে শুধু "ম্যাচমেকার" হিসেবে ব্যবহার করে সরাসরি ডিভাইসের মধ্যে ডাটা পাঠাতে হবে।

উদাহরণ:

  1. SSE (Server-Sent Events) কখন বেছে নেবে? যখন ক্লায়েন্টের কিছু বলার নেই, শুধু সার্ভার থেকে আপডেট শোনার অপেক্ষায় থাকে।

উদাহরণ:

  1. WebTransport কখন বেছে নেবে? এটি একদম "অ্যাডভান্সড" লেভেলের জন্য।

উদাহরণ:

alt text