[Node.js] Socket.io๋ก Room ๊ตฌํํ๊ธฐ (feat. TypeScript)
์๋ ํ์ธ์ Foma ์ ๋๋ค.
์ค๋์ Socket.io๋ฅผ ์ด์ฉํ์ฌ Room์ ๊ตฌํํด ํน์ Room์ ์๋ ์ ์ ๋ค์๊ฒ๋ง ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ผ ์ ์๋๋ก ๊ตฌํํด ๋ณด๊ฒ ์ต๋๋ค.
๋ฐ๋ก ์์ํ ๊ฒ์~
Preview
Install
typescript, ts-node, express, socket.io ๋ฅผ ์ค์นํด ์ค๋๋ค.
npm install typescript
npm install ts-node
npm install express
npm install socket.io
npm install @types/express
npm install @types/socket.io
Model
๋ฉ์ธ์ง ๋ชจ๋ธ์ ๋ง๋ค์ด ์ค๋๋ค.
export interface Message {
type: string;
user: string;
message: string;
room: string;
}
index.ts
express์ Message๋ฅผ import ํด์ค๋๋ค.
import express from "express";
import { Message } from "./models/Message";
express ์ฑ์ ๋ง๋ค์ด ์ฃผ๊ณ http socket.io ์๋ฒ๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
const app = express();
app.use(express.json());
let http = require("http").Server(app);
let io = require("socket.io")(http);
chat ๋ค์ ์คํ์ด์ค๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
const chatRoom = io.of("/chatRoom");
* NameSpace๋ ์์ผ url์์ ์๋ ํฌ์ธํธ ์ญํ ์ ํ๋ฉฐ ์ฌ๋ฌ Room๋ค์ ๊ฐ์ง ์ ์๋ ๊ณต๊ฐ์ผ๋ก ๋ณด์๋ฉด ๋ฉ๋๋ค.
์์์ ๋ง๋ chat ๋ค์ ์คํ์ด์ค๋ก connection ๋์์ ๋ ์ฝ๋๋ฅผ ์์ฑํด ์ค๋๋ค.
chat.on("connection", function (socket: any) { ...
์๋ฒ์ ์ ์ ๊ฐ ์ ์ํ์์ ๋ socket์ join() ๋ฉ์๋์ ๋ฉ์ธ์ง(ํ๋ผ๋ฏธํฐ) ๊ฐ์ฒด์ room์ผ๋ก ์ ์ํ๋๋ก ํฉ๋๋ค.
๊ทธ ๋ค์ chat ๋ค์์คํ์ด์ค์์ ๋ฉ์ธ์ง์ room์ ํด๋น ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋๋ก ํฉ๋๋ค.
socket.on("welcome", (message: Message) => {
socket.join(message.room);
chat.in(message.room).emit("welcome", message);
});
๊ทธ ๋ค์ ๋ฉ์ธ์ง๊ฐ ์์ ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ฑํด ์ค๋๋ค.
socket.on("message", (message: Message) => {
chat.in(message.room).emit("message", message);
});
๊ทธ ๋ค์ ์ ์ ๊ฐ ๋ ๋ฌ์ ๋๋ socket์ leave ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ํด๋น ๋ฉ์ธ์ง์ room์์ ๋ ๋๋๋ก ํฉ๋๋ค.
socket.on("leave", (message: Message) => {
socket.leave(message.room);
chat.in(message.room).emit("leave", message);
});
๋ง์ง๋ง์ผ๋ก http ์๋ฒ๋ฅผ ์คํ์์ผ ์ค๋๋ค.
http.listen(3001, function () {
console.log("listening on:3001");
});
Next Tutorial