🔌 WebSockets
Kya hai WebSocket?
WebSocket ek communication protocol hai jo client aur server ke beech full-duplex (do-taraf ka) real-time connection provide karta hai. Matlab dono taraf se simultaneously data bhej sakte hain, jaise phone call mein dono log ek saath baat kar sakte hain!
WebSocket ek communication protocol hai jo client aur server ke beech full-duplex (do-taraf ka) real-time connection provide karta hai. Matlab dono taraf se simultaneously data bhej sakte hain, jaise phone call mein dono log ek saath baat kar sakte hain!
Technical Definition:
WebSocket is a computer communications protocol providing full-duplex communication channels over a single TCP connection. It enables persistent, bidirectional communication between client and server.
WebSocket is a computer communications protocol providing full-duplex communication channels over a single TCP connection. It enables persistent, bidirectional communication between client and server.
WebSocket vs HTTP - Difference samjho
| Feature | HTTP | WebSocket |
|---|---|---|
| Communication | Request-Response (ek taraf) | Full-Duplex (dono taraf) |
| Connection | Har request ke liye naya | Persistent (ek baar connect, hamesha on) |
| Overhead | High (headers har baar) | Low (ek baar handshake) |
| Real-time | Polling required | Native support |
🎮 Interactive Demo: WebSocket Simulator
Client
🖥️
🖥️
Server
⚙️
⚙️
Disconnected
Code Example
// Client-side WebSocket
const socket = new WebSocket('ws://localhost:8080');
// Connection open hone par
socket.addEventListener('open', (event) => {
console.log('Connected to server!');
socket.send('Hello Server!');
});
// Message receive karne par
socket.addEventListener('message', (event) => {
console.log('Message from server:', event.data);
});
// Connection close hone par
socket.addEventListener('close', (event) => {
console.log('Disconnected from server');
});
⚡ Socket.io
Socket.io kya hai?
Socket.io ek library hai jo WebSocket ke upar built hai, lekin isse bahut zyada features milte hain! Ye automatically fallback provide karta hai agar WebSocket support nahi hai, aur rooms, namespaces, acknowledgments jaise powerful features deta hai. Matlab ye WebSocket ka "supercharged" version hai! 💪
Socket.io ek library hai jo WebSocket ke upar built hai, lekin isse bahut zyada features milte hain! Ye automatically fallback provide karta hai agar WebSocket support nahi hai, aur rooms, namespaces, acknowledgments jaise powerful features deta hai. Matlab ye WebSocket ka "supercharged" version hai! 💪
Technical Definition:
Socket.io is a JavaScript library for real-time web applications. It enables real-time, bidirectional, and event-based communication between browser and server. It consists of a Node.js server and a JavaScript client library.
Socket.io is a JavaScript library for real-time web applications. It enables real-time, bidirectional, and event-based communication between browser and server. It consists of a Node.js server and a JavaScript client library.
Socket.io ke Special Features
Rooms: Ye virtual channels hain jahan specific users ko group kar sakte ho. Jaise WhatsApp groups! Ek room mein message bhejo, sirf us room ke members ko milega.
// Server-side: User ko room mein add karo
socket.join('room1');
// Specific room mein message bhejo
io.to('room1').emit('message', 'Hello Room 1!');
// Room se leave karo
socket.leave('room1');
Custom Events: Apne custom events create kar sakte ho, sirf 'message' tak limited nahi! Jaise 'userJoined', 'typing', 'notification' etc.
// Server-side
socket.on('userTyping', (data) => {
socket.broadcast.emit('userTyping', data);
});
// Client-side
socket.emit('userTyping', { user: 'Raj', typing: true });
socket.on('userTyping', (data) => {
console.log(data.user + ' is typing...');
});
Broadcasting: Ek message sabko bhejo except khud ko! Jaise jab koi user join kare, baaki sabko notify karo.
// Sabko bhejo except sender
socket.broadcast.emit('userJoined', 'New user joined!');
// Sabko bhejo including sender
io.emit('announcement', 'Server maintenance in 5 min');
🎮 Interactive Demo: Chat Room Simulator
Current Room: None
📡 Server-Sent Events (SSE)
SSE kya hai?
Server-Sent Events ek technology hai jahan sirf server client ko data bhej sakta hai, client server ko nahi. Ye one-way communication hai, jaise TV broadcast - tum sirf receive karte ho, wapas nahi bhej sakte. Ye stock prices, news feeds, notifications ke liye perfect hai! 📊
Server-Sent Events ek technology hai jahan sirf server client ko data bhej sakta hai, client server ko nahi. Ye one-way communication hai, jaise TV broadcast - tum sirf receive karte ho, wapas nahi bhej sakte. Ye stock prices, news feeds, notifications ke liye perfect hai! 📊
Technical Definition:
Server-Sent Events (SSE) is a server push technology enabling a client to receive automatic updates from a server via HTTP connection. It's a unidirectional communication channel from server to client.
Server-Sent Events (SSE) is a server push technology enabling a client to receive automatic updates from a server via HTTP connection. It's a unidirectional communication channel from server to client.
SSE vs WebSocket - Kab kya use karein?
| Feature | SSE | WebSocket |
|---|---|---|
| Direction | Server → Client (one-way) | Both ways (bidirectional) |
| Protocol | HTTP | WebSocket Protocol |
| Complexity | Simple | Complex |
| Auto Reconnect | Built-in | Manual implementation |
| Use Case | News feeds, Stock prices, Notifications | Chat apps, Gaming, Collaborative tools |
🎮 Interactive Demo: Live Stock Price Simulator
AAPL
$150.00
--
GOOGL
$2800.00
--
TSLA
$700.00
--
Code Example
// Client-side SSE
const eventSource = new EventSource('/api/stream');
// Message receive karne par
eventSource.addEventListener('message', (event) => {
const data = JSON.parse(event.data);
console.log('Received:', data);
});
// Custom event listen karo
eventSource.addEventListener('stockUpdate', (event) => {
const stock = JSON.parse(event.data);
updateStockPrice(stock);
});
// Connection close karo
eventSource.close();
⚛️ React + TypeScript
TypeScript React mein kyun?
TypeScript React ke saath use karne se tumhare code mein type safety aati hai. Matlab galat type ka data pass kiya toh compile time pe hi error mil jayega, runtime pe nahi! Ye bugs kam karta hai aur code zyada maintainable banata hai. 🛡️
TypeScript React ke saath use karne se tumhare code mein type safety aati hai. Matlab galat type ka data pass kiya toh compile time pe hi error mil jayega, runtime pe nahi! Ye bugs kam karta hai aur code zyada maintainable banata hai. 🛡️
Technical Definition:
TypeScript is a strongly typed programming language that builds on JavaScript. When used with React, it provides static type checking, better IDE support, and improved code documentation through type annotations.
TypeScript is a strongly typed programming language that builds on JavaScript. When used with React, it provides static type checking, better IDE support, and improved code documentation through type annotations.
Props & State Types
// Props ke liye interface define karo
interface UserProps {
name: string;
age: number;
email?: string; // Optional prop
onUpdate: (id: number) => void;
}
// Functional Component with typed props
const UserCard: React.FC<UserProps> = ({ name, age, email, onUpdate }) => {
return (
<div>
<h3>{name}</h3>
<p>Age: {age}</p>
{email && <p>Email: {email}</p>}
</div>
);
};
// State ke liye type define karo
interface AppState {
count: number;
user: { name: string; id: number } | null;
loading: boolean;
}
const [state, setState] = useState<AppState>({
count: 0,
user: null,
loading: false
});
Custom Hooks with TypeScript
// Custom hook for WebSocket
interface UseWebSocketReturn {
messages: string[];
sendMessage: (msg: string) => void;
isConnected: boolean;
}
function useWebSocket(url: string): UseWebSocketReturn {
const [messages, setMessages] = useState<string[]>([]);
const [isConnected, setIsConnected] = useState(false);
const socketRef = useRef<WebSocket | null>(null);
useEffect(() => {
socketRef.current = new WebSocket(url);
socketRef.current.addEventListener('open', () => {
setIsConnected(true);
});
socketRef.current.addEventListener('message', (event) => {
setMessages(prev => [...prev, event.data]);
});
return () => socketRef.current?.close();
}, [url]);
const sendMessage = (msg: string) => {
socketRef.current?.send(msg);
};
return { messages, sendMessage, isConnected };
}
Redux with TypeScript
// Action types define karo
interface IncrementAction {
type: 'INCREMENT';
payload: number;
}
interface DecrementAction {
type: 'DECREMENT';
payload: number;
}
type CounterAction = IncrementAction | DecrementAction;
// State type
interface CounterState {
value: number;
}
// Reducer with types
const counterReducer = (
state: CounterState = { value: 0 },
action: CounterAction
): CounterState => {
switch (action.type) {
case 'INCREMENT':
return { value: state.value + action.payload };
case 'DECREMENT':
return { value: state.value - action.payload };
default:
return state;
}
};
🎮 Interactive Demo: Type Safety Checker
Neeche different scenarios try karo aur dekho TypeScript kaise errors catch karta hai!
Scenario 1: Props Type Checking
UserCard name="Raj" age="25" ❌
❌ Error: Type 'string' is not assignable to type 'number'
UserCard name="Raj" age={25} ✅
✅ Correct: All types match!
Scenario 2: State Type Checking
setState({ count: "10" }) ❌
❌ Error: Type 'string' is not assignable to type 'number'
setState({ count: 10 }) ✅
✅ Correct: Type matches AppState interface!
TypeScript Best Practices
- ✅ Interfaces use karo props aur state ke liye
- ✅ Type annotations explicitly likho, inference pe depend mat karo
- ✅ Generics use karo reusable components ke liye
- ✅ Strict mode enable karo tsconfig.json mein
- ✅ Any type avoid karo jitna ho sake
- ✅ Union types use karo multiple possible types ke liye
💼 Interview Questions
Q1: WebSocket aur HTTP mein kya difference hai? Easy
Answer:
HTTP: Request-response model hai. Client request bhejta hai, server response deta hai. Har request ke liye naya connection banta hai. Ye stateless protocol hai.
WebSocket: Persistent, full-duplex connection hai. Ek baar connection ban gaya toh dono taraf se simultaneously data bhej sakte hain. Ye stateful protocol hai aur real-time communication ke liye perfect hai.
Key Differences:
HTTP: Request-response model hai. Client request bhejta hai, server response deta hai. Har request ke liye naya connection banta hai. Ye stateless protocol hai.
WebSocket: Persistent, full-duplex connection hai. Ek baar connection ban gaya toh dono taraf se simultaneously data bhej sakte hain. Ye stateful protocol hai aur real-time communication ke liye perfect hai.
Key Differences:
- HTTP: Unidirectional, WebSocket: Bidirectional
- HTTP: New connection har request pe, WebSocket: Single persistent connection
- HTTP: High overhead (headers), WebSocket: Low overhead
Q2: Socket.io mein rooms aur namespaces ka kya use hai? Medium
Answer:
Rooms: Rooms arbitrary channels hain jahan sockets ko group kar sakte ho. Ek socket multiple rooms mein ho sakta hai. Ye server-side concept hai aur specific groups ko messages broadcast karne ke liye use hota hai.
Example: Chat application mein different chat rooms (General, Tech, Random)
Namespaces: Namespaces application logic ko separate karne ka tarika hai. Ye different endpoints create karte hain ek hi connection pe. Har namespace ka apna event handlers aur rooms ho sakte hain.
Example: /admin namespace for admin users, /user namespace for regular users
Key Difference: Namespaces connection level pe separation provide karte hain, jabki rooms ek namespace ke andar grouping provide karte hain.
Rooms: Rooms arbitrary channels hain jahan sockets ko group kar sakte ho. Ek socket multiple rooms mein ho sakta hai. Ye server-side concept hai aur specific groups ko messages broadcast karne ke liye use hota hai.
Example: Chat application mein different chat rooms (General, Tech, Random)
Namespaces: Namespaces application logic ko separate karne ka tarika hai. Ye different endpoints create karte hain ek hi connection pe. Har namespace ka apna event handlers aur rooms ho sakte hain.
Example: /admin namespace for admin users, /user namespace for regular users
Key Difference: Namespaces connection level pe separation provide karte hain, jabki rooms ek namespace ke andar grouping provide karte hain.
Q3: SSE kab use karein aur kab WebSocket? Medium
Answer:
SSE use karo jab:
WebSocket use karo jab:
SSE use karo jab:
- Sirf server se client ko data bhejna hai (one-way)
- Simple implementation chahiye
- Automatic reconnection chahiye
- HTTP infrastructure use karna hai
- Use cases: Stock prices, news feeds, notifications, live scores
WebSocket use karo jab:
- Bidirectional communication chahiye
- Low latency critical hai
- High frequency data exchange hai
- Binary data transfer karna hai
- Use cases: Chat applications, multiplayer games, collaborative editing
Q4: React mein TypeScript ke kya benefits hain? Easy
Answer:
Main Benefits:
Main Benefits:
- Type Safety: Compile time pe errors catch ho jate hain, runtime pe nahi
- Better IDE Support: Autocomplete, IntelliSense, aur refactoring tools better work karte hain
- Self-documenting Code: Types se code ka documentation automatically ban jata hai
- Easier Refactoring: Type system ki wajah se refactoring safe aur easy ho jata hai
- Better Team Collaboration: Types se code ka contract clear hota hai
- Catch Bugs Early: Props, state, aur function arguments mein type mismatches turant catch ho jate hain
Q5: Custom hooks mein TypeScript kaise use karein? Medium
Answer:
Custom hooks mein TypeScript use karne ke liye:
1. Return type define karo: Hook kya return karega, uska interface/type banao
2. Parameter types define karo: Hook ko kya arguments chahiye
3. Internal state types: useState, useRef ke liye proper types use karo
Example Pattern:
Benefits: Type safety, better autocomplete, aur reusability
Custom hooks mein TypeScript use karne ke liye:
1. Return type define karo: Hook kya return karega, uska interface/type banao
2. Parameter types define karo: Hook ko kya arguments chahiye
3. Internal state types: useState, useRef ke liye proper types use karo
Example Pattern:
interface UseApiReturn<T> {
data: T | null;
loading: boolean;
error: Error | null;
refetch: () => void;
}
function useApi<T>(url: string): UseApiReturn<T> { ... }
Benefits: Type safety, better autocomplete, aur reusability
Q6: Redux mein TypeScript integration ke best practices kya hain? Hard
Answer:
Best Practices:
1. Action Types: Union types use karo sabhi actions ke liye
2. State Type: Root state ka interface define karo
3. Typed Hooks: useSelector aur useDispatch ko type karo
4. Action Creators: Return type explicitly define karo
5. Redux Toolkit: Use karo for better TypeScript support with less boilerplate
6. Discriminated Unions: Action types mein use karo for better type narrowing
Best Practices:
1. Action Types: Union types use karo sabhi actions ke liye
type AppActions = IncrementAction | DecrementAction | ResetAction;2. State Type: Root state ka interface define karo
interface RootState { counter: CounterState; user: UserState; }3. Typed Hooks: useSelector aur useDispatch ko type karo
const useAppDispatch = () => useDispatch<AppDispatch>();
const useAppSelector: TypedUseSelectorHook<RootState> = useSelector;4. Action Creators: Return type explicitly define karo
5. Redux Toolkit: Use karo for better TypeScript support with less boilerplate
6. Discriminated Unions: Action types mein use karo for better type narrowing
Q7: Real-time chat application mein scalability kaise achieve karein? Hard
Answer:
Scalability Strategies:
1. Horizontal Scaling:
2. Message Queue:
3. Database Optimization:
4. Connection Management:
5. CDN & Edge Computing: Static assets aur media files ke liye
Scalability Strategies:
1. Horizontal Scaling:
- Multiple server instances run karo
- Load balancer use karo (sticky sessions ke saath)
- Redis adapter use karo Socket.io ke saath for cross-server communication
2. Message Queue:
- RabbitMQ ya Kafka use karo message processing ke liye
- Decouple message handling from WebSocket connections
3. Database Optimization:
- Message history ke liye efficient indexing
- Caching layer (Redis) for frequently accessed data
- Sharding for large user bases
4. Connection Management:
- Connection pooling
- Heartbeat mechanism for dead connection cleanup
- Rate limiting to prevent abuse
5. CDN & Edge Computing: Static assets aur media files ke liye
🎉 Congratulations!
Tumne Real-time Data aur TypeScript ka complete journey complete kar liya!
Ab tum production-ready real-time applications build kar sakte ho! 🚀