Socket.IO کلائنٹ اور سرور کے درمیان دو طرفہ ریئل ٹائم مواصلات کے لیے ایک لائبریری ہے جو WebSocket پر مبنی ہے اور خودکار فال بیک کے ساتھ ہے۔ یہ چیٹ، گیمز اور مشترکہ ایڈیٹرز میں فوری ڈیٹا منتقلی کے لیے قابل اعتماد ٹرانسپورٹ فراہم کرتی ہے۔ سرکاری Socket.IO دستاویزات (2024) کے مطابق، لائبریری مناسب ترتیب کے ساتھ ایک سرور پر دس لاکھ سے زیادہ کنکشنز پروسیس کرتی ہے۔
اہم نکات
Socket.IO کلائنٹ اور سرور کے درمیان دو طرفہ واقعہ پر مبنی مواصلات کے لیے ایک اوپن سورس JavaScript لائبریری ہے۔ اسے 2010 میں ڈویلپر Guillermo Rauch نے بنایا تھا اور تب سے یہ Node.js پر ریئل ٹائم ایپلیکیشنز کے لیے ڈی فیکٹو معیار بن گیا ہے۔
مقامی WebSocket API کے برعکس، Socket.IO اضافی تجرید فراہم کرتا ہے: کمرے، نام کی جگہیں، خودکار دوبارہ کنکشن اور بائنری ڈیٹا کی اقسام۔ لائبریری WebSocket کا علیحدہ نفاذ نہیں ہے — یہ ٹرانسپورٹ پرت کے طور پر Engine.IO استعمال کرتی ہے، جو پہلے HTTP long-polling کنکشن قائم کرتی ہے، پھر WebSocket میں اپ گریڈ کرنے کی کوشش کرتی ہے۔
npm کے اعدادوشمار (2025) کے مطابق، socket.io پیکیج کی ہفتہ وار 12 ملین سے زیادہ کاپیاں ڈاؤن لوڈ کی جاتی ہیں، جو اسے Node.js ماحولیاتی نظام میں مقبول ترین لائبریریوں میں سے ایک بناتی ہے۔ Socket.IO تمام جدید پلیٹ فارمز پر معاون ہے: براؤزرز، iOS، Android، React Native اور ڈیسک ٹاپ ایپلیکیشنز۔
Socket.IO ورژن 1.0 2014 میں جاری کیا گیا تھا اور اس نے نام کی جگہوں کا تصور متعارف کرایا، جو ایک TCP کنکشن پر متعدد منطقی چینلز کو ملٹی پلیکس کرنے کی اجازت دیتے ہیں۔ ورژن 2.0 (2017) نے بائنری ڈیٹا کے لیے معاونت شامل کی اور تجزیہ کارکردگی کو بہتر کیا۔ موجودہ ورژن 4.x (2020–2025) میں TypeScript کے لیے مکمل معاونت، اسکیلنگ کے لیے فلیگ شپ اڈاپٹر موڈ اور بہتر پسماندہ مطابقت شامل ہے۔
ہر بڑی ریلیز API پسماندہ مطابقت برقرار رکھتی ہے — ایک socket.io@2 کلائنٹ خصوصی مطابقت موڈ کے ذریعے socket.io@4 سرور سے منسلک ہو سکتا ہے۔ یہ طویل المدت منصوبوں کے لیے اہم ہے جہاں کلائنٹ سائیڈ اپ گریڈ بتدریج ہوتے ہیں۔
Socket.IO آرکیٹیکچر دو اجزاء پر مشتمل ہے: سرور ماڈیول (npm پیکیج socket.io) اور کلائنٹ ماڈیول (npm پیکیج socket.io-client)۔ سرور Node.js HTTP(S) سرور پر چلتا ہے اور ٹرانسپورٹ پرت کو منظم کرنے کے لیے Engine.IO استعمال کرتا ہے۔
ابتدائی کنکشن پر، کلائنٹ سرور کو HTTP درخواست بھیجتا ہے۔ Engine.IO جواب دیتا ہے اور ایک long-polling کنکشن قائم کرتا ہے۔ اس کے بعد، کلائنٹ ٹرانسپورٹ پروٹوکول کو WebSocket میں اپ گریڈ کرنے کی درخواست بھیجتا ہے۔ اگر سرور WebSocket کو سپورٹ کرتا ہے، تو اپ گریڈ ایک TCP سیشن میں ہوتا ہے۔ اگر نہیں، تو کنکشن long-polling پر رہتا ہے اور ایپلیکیشن کوڈ میں تبدیلی کی ضرورت نہیں ہوتی۔
Socket.IO کارکردگی کے ٹیسٹ (2024) کے مطابق، WebSocket استعمال کرتے وقت تاخیر 2–5 ms فی پیغام ہے، جبکہ long-polling HTTP اوور ہیڈ کی وجہ سے 150–300 ms کا اضافہ کرتا ہے۔ ٹرانسپورٹ کا انتخاب ڈویلپر کے لیے شفاف ہے۔
Engine.IO نچلی سطح کی ٹرانسپورٹ پرت ہے جس پر Socket.IO بنایا گیا ہے۔ یہ کنکشن قیام، ٹرانسپورٹ انتخاب، heartbeat (ping/pong) اور کنکشن ختم کرنے کو سنبھالتا ہے۔ Engine.IO پیکیٹ کی اہم اقسام ہیں: open (ابتداء)، close (بندش)، ping/pong (زندہ رکھنا)، upgrade (ٹرانسپورٹ تبدیلی) اور message (ڈیٹا)۔
Socket.IO Engine.IO کے اوپر اپنا واقعہ پر مبنی ماڈل بناتا ہے — ڈویلپر اسی کے ساتھ کام کرتا ہے۔ ہر Socket.IO پیغام ترسیل کی تصدیق کے لیے ایک منفرد شناخت کنندہ کے ساتھ Engine.IO پیکیٹ میں لپیٹا جاتا ہے۔
Socket.IO خصوصیات کا ایک مجموعہ فراہم کرتا ہے جو مقامی WebSocket API میں موجود نہیں ہیں اور ریئل ٹائم ایپلیکیشنز کی ترقی کو نمایاں طور پر آسان بناتے ہیں۔ آئیے اہم خصوصیات پر نظر ڈالتے ہیں۔
خودکار دوبارہ کنکشن — کلائنٹ منقطع ہونے پر ایکسپونینشل بیک آف (100 ms، 200 ms، 400 ms... زیادہ سے زیادہ تک) کے ساتھ خود بخود کنکشن بحال کرتا ہے۔ Socket.IO دستاویزات (2024) کے مطابق، دوبارہ کوشش کی ترتیبات reconnectionDelay اور reconnectionAttempts پیرامیٹرز کے ذریعے دستیاب ہیں۔ یہ آپشن موبائل ایپلیکیشنز کے لیے اہم ہے جہاں نیٹ ورک تبدیل ہونے پر کنکشن منقطع ہو سکتا ہے۔
کمروں کی معاونت — سرور ساکٹ کو کمروں میں گروپ کر سکتا ہے اور صرف ایک مخصوص کمرے کے شرکاء کو پیغامات بھیج سکتا ہے۔ کمروں کو واضح تخلیق کی ضرورت نہیں ہوتی — پہلے ساکٹ کے شامل ہونے پر یہ بن جاتے ہیں۔ کمرے عمل درجے پر لاگو ہوتے ہیں اور خصوصی اڈاپٹر کے بغیر مختلف سرورز کے درمیان شیئر نہیں ہوتے۔
نام کی جگہیں — ایک کنکشن پر مواصلاتی چینلز کی منطقی علیحدگی۔ مثال کے طور پر، چیٹ پیغامات کے لیے /chat نام کی جگہ اور اطلاعوں کے لیے /notifications۔ ہر نام کی جگہ کے اپنے کمرے، مڈل ویئر اور ہینڈلر ہوتے ہیں۔ نام کی جگہیں ایک TCP کنکشن پر ملٹی پلیکس ہوتی ہیں، جس سے وسائل کی بچت ہوتی ہے۔
ترسیل کی تصدیق — پیغام بھیجتے وقت، ایک کال بیک فنکشن پاس کیا جا سکتا ہے جو سرور کی طرف سے وصولی کی تصدیق کرنے پر کال کیا جائے گا۔ یہ ہر پیکیٹ کے لیے ایک منفرد شناخت کنندہ کے ذریعے لاگو کیا جاتا ہے۔ تصدیق کا طریقہ کار یقینی بناتا ہے کہ اہم پیغامات (مثلاً ادائیگی کے لین دین) وصول کنندہ تک پہنچائے جائیں۔
Socket.IO اور مقامی WebSocket کے درمیان انتخاب منصوبے کی ضروریات پر منحصر ہے۔ WebSocket ایک معیاری پروٹوکول (RFC 6455) ہے جو تمام جدید براؤزرز کے ذریعے تعاون یافتہ ہے۔ Socket.IO ایک لائبریری ہے جو WebSocket کو ٹرانسپورٹ کے طور پر استعمال کرتی ہے لیکن اضافی خصوصیات شامل کرتی ہے۔
| خصوصیت | Socket.IO | WebSocket |
|---|---|---|
| ٹرانسپورٹ | WebSocket + HTTP long-polling (فال بیک) | صرف WebSocket |
| واقعہ ماڈل | JSON پے لوڈ کے ساتھ نامزد واقعات | صرف متن/بائنری فریم |
| کمرے | بلٹ ان ساکٹ گروپ بندی | دستی نفاذ کی ضرورت |
| خودکار دوبارہ کنکشن | بلٹ ان | دستی نفاذ کی ضرورت |
| ترسیل کی تصدیق | کال بیک کے ساتھ ACK طریقہ کار | پروٹوکول ایکسٹینشن کے ذریعے دستیاب |
| اسکیلنگ | اڈاپٹر (Redis, MongoDB, Cluster) | اپنا بنیادی ڈھانچہ درکار |
| لائبریری کا سائز | ~50 KB (کلائنٹ، gzip) | براؤزر میں بلٹ (0 KB) |
اگر آپ کے منصوبے کو زیادہ سے زیادہ کارکردگی اور کم سے کم کلائنٹ سائز کی ضرورت ہے — مقامی WebSocket منتخب کریں۔ اگر آپ کو قابل اعتماد ترسیل، گروپ بندی اور واقعہ پر مبنی ماڈل کی ضرورت ہے — Socket.IO تیار تجرید کی وجہ سے ترقی کے وقت کو 2–3 گنا کم کر دے گا۔
State of JS 2024 سروے کے مطابق، 67% ریئل ٹائم ایپلیکیشن ڈویلپرز آسان API اور کنارے کی صورتوں (نیٹ ورک منقطع، دوبارہ کنکشن، بائنری ڈیٹا) کے بلٹ ان ہینڈلنگ کی وجہ سے Socket.IO کو ترجیح دیتے ہیں۔
Socket.IO انسٹال کرنا دو پیکیجز کی ضرورت ہے: سرور سائیڈ اور کلائنٹ سائیڈ۔ آئیے Node.js پروجیکٹ کے لیے بنیادی سیٹ اپ دیکھتے ہیں۔ سرور HTTP سرور بناتا ہے، Socket.IO کو شروع کرتا ہے اور کلائنٹ کنکشن اور منقطع ہونے کے واقعات کو سنبھالتا ہے۔
Socket.IO دستاویزات (2024) کے مطابق، سرور کو بلٹ ان http ماڈیول استعمال کرکے Express کے بغیر شروع کیا جا سکتا ہے، لیکن حقیقی منصوبوں میں HTTP درخواست روٹنگ کے لیے عام طور پر Express یا Fastify استعمال کیا جاتا ہے۔
const express = require('express');
const http = require('http');
const Server = require('socket.io');
const app = express();
const server = http.createServer(app);
const io = new Server(server, {
cors: { origin: '*' }
});
io.on('connection', (socket) => {
console.log('کلائنٹ منسلک:', socket.id);
socket.emit('welcome', { message: 'Hello from server' });
socket.on('disconnect', () => {
console.log('کلائنٹ منقطع');
});
});
server.listen(3000, () => {
console.log('سرور پورٹ 3000 پر چل رہا ہے');
});
import { io } from 'socket.io-client';
const socket = io('http://localhost:3000', {
transports: ['websocket', 'polling'],
reconnectionDelay: 1000
});
socket.on('welcome', (data) => {
console.log(data.message);
});
socket.emit('chat message', {
user: 'Alice',
text: 'Hello everyone!'
});
Socket.IO واقعہ ماڈل نامزد واقعات پر مبنی ہے۔ سرور اور کلائنٹ ایک مخصوص واقعہ کے نام سے منسلک پیغامات بھیجتے اور وصول کرتے ہیں۔ پے لوڈ ایک سٹرنگ، JSON آبجیکٹ یا بائنری ڈیٹا (Buffer, ArrayBuffer, Blob) ہو سکتا ہے۔
ہر واقعہ ACK (اعتراف) کی حمایت کرتا ہے — ایک کال بیک فنکشن پاس کرنا جو وصول کنندہ کے ذریعے واقعہ کی پروسیسنگ کے بعد بھیجنے والے کی طرف عمل میں آتا ہے۔ یہ واقعہ ماڈل پر درخواست جوابی پیٹرن لاگو کرنے کی اجازت دیتا ہے۔ ACK صرف اس وقت کام کرتا ہے جب وصول کنندہ واضح طور پر کال بیک کو کال کرے۔
Socket.IO دستاویزات (2024) کے مطابق، بہترین کارکردگی کے لیے ایک پیغام کا زیادہ سے زیادہ سائز 1 MB سے زیادہ نہیں ہونا چاہیے۔ بڑے پیغامات کو ٹکڑوں میں تقسیم کیا جانا چاہیے یا علیحدہ چینل کے ذریعے بھیجا جانا چاہیے۔
io.on('connection', (socket) => {
socket.join('room-1');
socket.to('room-1').emit('user joined', {
userId: socket.id
});
io.to('room-1').emit('message', {
text: 'Broadcast to room'
});
socket.leave('room-1');
});
افقی اسکیلنگ کے لیے متعدد سرور عملوں کے درمیان حالت شیئر کرنے کے مسئلے کو حل کرنے کی ضرورت ہے۔ کمرے، نام کی جگہیں اور منسلک ساکٹ کی فہرست ایک عمل کی میموری میں محفوظ ہوتی ہے اور اڈاپٹر کے بغیر دوسرے عملوں کو نظر نہیں آتی۔
سرکاری Socket.IO اڈاپٹر: redis (Redis Pub/Sub کے ذریعے)، mongodb (MongoDB change streams کے ذریعے)، cluster (Node.js کلسٹر ملٹی پروسیس موڈ کے لیے)۔ اڈاپٹر Socket.IO مثالوں کے درمیان پیغام بروکر کے طور پر کام کرتا ہے۔ جب کسی کمرے میں واقعہ بھیجا جاتا ہے، اڈاپٹر اسے Redis میں شائع کرتا ہے اور تمام سرورز اطلاع حاصل کرتے ہیں۔
Socket.IO لوڈ ٹیسٹنگ (2024) کے مطابق، Redis اڈاپٹر کے ساتھ 4 سرورز کا کلسٹر 10 ms سے کم تاخیر کے ساتھ 400,000 تک بیک وقت کنکشنز پروسیس کرتا ہے۔ اڈاپٹر کے بغیر، ایک Node.js عمل کی زیادہ سے زیادہ صلاحیت 1 GB میموری کے ساتھ تقریباً 100,000 کنکشنز ہے۔
const Server = require('socket.io');
const RedisAdapter = require('@socket.io/redis-adapter');
const Redis = require('ioredis');
const pubClient = new Redis({ host: 'localhost', port: 6379 });
const subClient = pubClient.duplicate();
const io = new Server(server);
io.adapter(RedisAdapter(pubClient, subClient));
Kubernetes یا Docker Swarm استعمال کرتے وقت، سیشن ایفینیٹی (اسٹکی سیشن) ترتیب دینے کی سفارش کی جاتی ہے تاکہ ایک ہی کلائنٹ کی درخواستیں ایک ہی سرور پر جائیں؛ بصورت دیگر ہر دوبارہ کنکشن پر تفویض تبدیل ہو سکتی ہے۔
اکثر پوچھے گئے سوالات
Socket.IO نامزد واقعات کے ساتھ ایک واقعہ ماڈل، خودکار دوبارہ کنکشن، کمروں کی معاونت اور HTTP long-polling پر فال بیک فراہم کرتا ہے۔ مقامی WebSocket ایک نچلی سطح کا پروٹوکول ہے جس میں کم سے کم API ہے اور ان میکانکس کے دستی نفاذ کی ضرورت ہے۔
ہاں، Python (python-socketio)، Java (netty-socketio)، Go (go-socketio) اور دیگر زبانوں کے لیے سرور کی طرف تیسرے فریق کے نفاذ موجود ہیں۔ socket.io-client JavaScript، Swift، Kotlin اور C++ کے لیے دستیاب ہے۔
Socket.IO کے ساتھ ایک Node.js عمل 1 GB RAM کے ساتھ 100,000 کنکشنز تک پروسیس کرتا ہے۔ Redis اڈاپٹر اور 4 سرورز کے ساتھ، کلسٹر 400,000 بیک وقت کلائنٹس تک سنبھال سکتا ہے۔
ہاں، iOS کے لیے Swift میں ایک سرکاری کلائنٹ ہے، Android کے لیے — Java/Kotlin میں ایک کلائنٹ ہے۔ React Native کے لیے معیاری JavaScript socket.io-client استعمال ہوتا ہے۔
HTTP/WS کے بجائے HTTPS/WSS استعمال کریں، ٹوکن (JWT) کے ذریعے تصدیق کے لیے مڈل ویئر ترتیب دیں، توثیق کاروں کے ذریعے باہر جانے والے واقعات کی حدیں مقرر کریں اور DDoS تحفظ کے لیے ریٹ لمیٹنگ استعمال کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔