
๋ธ๋ผ์ฐ์ ์ ์๋ฒ ๊ฐ ์๋ฐฉํฅ ์ค์๊ฐ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
WebSocket์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ
๋ธ๋ผ์ฐ์ ๊ฐ WebSocket์ ์ง์ํ์ง ์์ ๊ฒฝ์ฐ Long Polling ๋ฑ์ ๋์ฒด ๊ธฐ์ ์๋ ์ ์ฉ โ ์์ ์ฑ ํ๋ณด
socket.io์ค์๊ฐ ์ฑํ , ๊ฒ์, ์๋ฆผ ์๋น์ค ๊ฐ์ ์ง์์ ์ธ ๋ฐ์ดํฐ ๊ตํ์ด ํ์ํ ์๋น์ค์ ์ ํฉ !
socket.io์ ํน์งemit()๊ณผ on()์ ์ฌ์ฉํด ํน์ ์ด๋ฒคํธ์ ๋ํ ๋ฐ์ดํฐ ์ฃผ๊ณ ๋ฐ๊ธฐ ๊ฐ๋ฅsocket.io ์ฌ์ฉํ๊ธฐsocket.io ์ค์นnpm install socket.io-client
socket.io ์ฐ๊ฒฐimport { io } from "socket.io-client";
const socket = io("https://example.com");
socket.on("connect", () => {
console.log("โ
Socket.io ์ฐ๊ฒฐ ์ฑ๊ณต!");
});
emit() on()๐ค ํด๋ผ์ด์ธํธ โ ์๋ฒ (์ด๋ฒคํธ ์ ์ก)
// socket.emit("์ด๋ฒคํธ ์ด๋ฆ", ํด๋น ์ด๋ฒคํธ์ ๋ณด๋ผ ๋ฐ์ดํฐ)
socket.emit("message", "Hello Server!");
๐ฅ ์๋ฒ โ ํด๋ผ์ด์ธํธ (์ด๋ฒคํธ ์์ )
// socket.on("์ด๋ฒคํธ ์ด๋ฆ", ํด๋น ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ํจ์)
socket.on("message", (data) => {
console.log("๐ฉ ์๋ฒ์์ ๋ฐ์ ๋ฉ์์ง:", data);
});
socket.on("disconnect", () => {
console.log("๐ซ ์ฐ๊ฒฐ์ด ์ข
๋ฃ๋์์ต๋๋ค.");
});
socket.disconnect(); // ์ฐ๊ฒฐ ๋๊ธฐ
| WebSocket API | socket.io | |
|---|---|---|
| ์ฐ๊ฒฐ ๋ฐฉ์ | new WebSocket(url) | io(url) |
| ๋ฉ์์ง ์ ์ก | socket.send(data) | socket.emit(event, data) |
| ์ด๋ฒคํธ | onopen onmessage onclose onerror | on('connect') on('disconnect') on('message') |
| ์๋ ์ฌ์ฐ๊ฒฐ | ์ง์ ๊ตฌํ ํ์ | ๊ธฐ๋ณธ ์ง์ |
| Rooms & Namespaces | ์ง์ ๊ตฌํ ํ์ | ๊ธฐ๋ณธ ์ ๊ณต |
| Fallback ์ง์ | ์ง์ ์ ํจ | WebSocket์ด ์ ๋๋ ๊ฒฝ์ฐ Long Polling ์ฌ์ฉ |
const getChatRooms = useCallback(() => {
socket.emit("getChatRooms");
}, [chatRoomId]);
useEffect(() => {
if (!socket) return;
getChatRooms();
const handleChatRooms = (rooms: ChatRooms[]) => {
setChats(rooms);
};
socket.on("chatRooms", handleChatRooms);
return () => {
socket.off("chatRooms", handleChatRooms);
// socket.off("์ด๋ฒคํธ๋ช
")์ ํด๋น ์ด๋ฒคํธ์ ๋ชจ๋ ๋ฆฌ์ค๋๋ฅผ ์ ๊ฑฐ
// ํน์ ํธ๋ค๋ฌ๋ง ์ ๊ฑฐํ๋ ค๋ฉด ์ฝ๋ฐฑ ํจ์๋ฅผ ํจ๊ป ์ ๋ฌ
};
}, [socket]);