๋ธ๋ผ์ฐ์ ์ ์๋ฒ ๊ฐ ์๋ฐฉํฅ ์ค์๊ฐ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
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]);