Real-time Features with Socket.io
🚀 File-based React Native: Real-time Features with Socket.io (TypeScript)
React Native অ্যাপে Real-time Features মানে হলো ব্যবহারকারী যেকোনো পরিবর্তন বা ডাটা সেকেন্ডের মধ্যে দেখতে পারে। Socket.io ব্যবহার করে আমরা সহজেই এই ধরনের ফিচার তৈরি করতে পারি। এখানে আমরা TypeScript ব্যবহার করবো।
📌 ১. Project Setup (File-based React Native + TypeScript)
প্রথমে React Native + TypeScript environment সেটআপ করুন:
npx react-native init RealtimeApp --template react-native-template-typescript cd RealtimeApp npm install socket.io-client
এখানে আমরা socket.io-client ব্যবহার করবো React Native এর client এর জন্য।
📌 ২. Folder Structure (File-based Approach)
আমাদের প্রজেক্ট ফোল্ডার হতে পারে এমন:
- src/
- src/components/Chat.tsx
- src/screens/HomeScreen.tsx
- src/services/socket.ts
- App.tsx
📌 ৩. Socket Service Setup
একটি Socket service তৈরি করুন যা সব screen/component থেকে import করা যাবে।
import { io, Socket } from "socket.io-client";
let socket: Socket;
export const initSocket = () => {
socket = io("http://localhost:3000"); // আপনার server URL
return socket;
};
export const getSocket = () => socket;
আমরা এখানে একটি centralized socket তৈরি করেছি যা সব component ব্যবহার করতে পারবে।
📌 ৪. Chat Component তৈরি
এখন একটি Chat component তৈরি করি যা socket দিয়ে message পাঠাবে এবং রিসিভ করবে।
import React, { useEffect, useState } from "react";
import { View, TextInput, Button, FlatList, Text } from "react-native";
import { getSocket, initSocket } from "../services/socket";
interface Message {
id: string;
text: string;
}
const Chat: React.FC = () => {
const [message, setMessage] = useState("");
const [messages, setMessages] = useState([]);
const socket = initSocket();
useEffect(() => {
socket.on("newMessage", (msg: Message) => {
setMessages(prev => [...prev, msg]);
});
return () => {
socket.off("newMessage");
};
}, []);
const sendMessage = () => {
if(message.trim() === "") return;
const msg: Message = { id: Date.now().toString(), text: message };
socket.emit("sendMessage", msg);
setMessage("");
};
return (
<View className="p-4">
<FlatList
data={messages}
keyExtractor={(item) => item.id}
renderItem={({ item }) => <Text className="mb-2">{item.text}</Text>}
/>
<TextInput
className="border-2 border-teal-400 p-2 mb-2 rounded"
placeholder="Message লিখুন..."
value={message}
onChangeText={setMessage}
/>
<Button title="Send" onPress={sendMessage} color="#0d9488" />
</View>
);
};
export default Chat;
এখানে FlatList দিয়ে সব message দেখাচ্ছে। TextInput থেকে message পাঠানো হচ্ছে এবং socket.on() দিয়ে অন্য user-এর message রিসিভ হচ্ছে।
📌 ৫. Home Screen Setup
import React from "react";
import { SafeAreaView } from "react-native";
import Chat from "../components/Chat";
const HomeScreen: React.FC = () => {
return (
<SafeAreaView className="flex-1">
<Chat />
</SafeAreaView>
);
};
export default HomeScreen;
📌 ৬. Output & Demo
এখন আপনার অ্যাপ রান করলে, দুইটি device বা emulator থেকে একই time-এ message পাঠানো ও receive দেখানো যাবে।
- Message Input থেকে লিখুন → Send করুন
- অন্য user real-time এ message দেখতে পারবে
- FlatList সব message দেখাবে
এইভাবে আমরা React Native + TypeScript + Socket.io দিয়ে একটি সহজ real-time chat তৈরি করতে পারি।
✨ Summary
- File-based structure ব্যবহার করে project organize করা সহজ হয়।
- Socket.io client-server communication সহজ করে।
- React Native এর FlatList + state management ব্যবহার করে real-time data efficiently render করা যায়।
- TypeScript ব্যবহার করলে type safety ও code maintainability বৃদ্ধি পায়।