์น์์ผ ํ๋กํ ์ฝ์ HTTP ์๋ ๋ค๋ฅธ ํต์ ํ๋กํ ์ฝ๋ก ์น ์๋ฒ์ ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ก ์ค์๊ฐ ๋ฉ์ธ์ง๋ฅผ ๊ตํํ๋ ๋ฐ์ ์ฌ์ฉ๋๋ค. ์น์์ผ ์ฐ๊ฒฐ์ ๋งบ๊ธฐ ์ํ ์ฒซ ๋ฒ์งธ ํธ๋์ ฐ์ดํฌ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ดํ ์ง์์ ์ผ๋ก ์ฐ๊ฒฐ์ด ์ ์ง๋๋ ๊ฒ์ด ํน์ง์ด๋ค. ๋งค๋ฒ ๋ฉ์ธ์ง ์ ์ก์์ ์๋กญ๊ฒ ์ฐ๊ฒฐ์ ๋งบ์ ํ์๊ฐ ์์ด ๋น ๋ฅด๊ณ ํจ์จ์ ์ด๋ค. ์น์์ผ ํ๋กํ ์ฝ์ HTTP ์ ๋์ผํ๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์ ๋์ํ๋ค.
๋ฐ์ดํฐ ์ก์์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ. ํต์์ ์ธ HTTP ํต์ ์ client ๊ฐ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ์๋ง Server๊ฐ ์๋ต์ ํ๋ ๋จ๋ฐฉํฅ ํต์ ์ด์ง๋ง, ์น ์์ผ์ ์๋ฐฉํฅ ํต์ ์ด ๊ฐ๋ฅํ๋ค.
์น ํ๊ฒฝ์์ ์ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๋ ธ์ถํ๋ ๊ฒ. ex. ์ฑํ , ์ฃผ์
- Opening Handshake : HTTP Upgrade request / HTTP 101 response
- Data transfer : WS frame
- Closing Handshake : CLose / Close Response
๊ฐ namespace ๋ด์์ ์์์ ์ฑ๋์ ์ง์ ํ ์ ์๋ค. ์ด๋ฅผ room์ด๋ผ ํ๋ฉฐ ์ด๋ฅผ ํตํด room์ join๋์ด ์๋ ํด๋ผ์ด์ธํธ ๋ง์ ๋ฐ์ดํฐ ์ก์์ ์ด ๊ฐ๋ฅํ๊ฒ ๋๋ค. ์ฆ ๊ฐ ํด๋ผ์ด์ธํธ๋ socket์ ๊ฐ์ง๊ฒ ๋๋ฉฐ ์ด socket์ namespace๋ฅผ ๊ฐ์ง๊ณ ๊ฐ namespace๋ room์ ๊ฐ์ง ์ ์๋ค.
socket.connect(): ํด๋ผ์ด์ธํธ ์์ผ์ ์๋ฒ์ ์ฐ๊ฒฐ
socket.disconnect(): ์์ผ ์ฐ๊ฒฐ์ ์ข ๋ฃ
socket.send(): ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐ๋ ์๋๋ฐฉ์๊ฒ ๋ณด๋ธ๋ค.
socket.on('event', callback): ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์คํํ ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ฑ๋กํ๋ค.
socket.emit('event', data): ํด๋ผ์ด์ธํธ๋ ์๋ฒ์์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํต๋๋ค. ์ฐ๊ฒฐ๋ ์๋๋ฐฉ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ์ ์๋ค.
socket.join(room): ํด๋ผ์ด์ธํธ๋ฅผ ํน์ ๋ฃธ์ ์กฐ์ธ์ํจ๋ค.
socket.leave(room): ํด๋ผ์ด์ธํธ๋ฅผ ํน์ ๋ฃธ์์ ๋๊ฐ๊ฒ ํ๋ค.
socket.broadcast.emit('event', data): ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋ชจ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํค๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ๋ค.
socket.rooms: ํด๋ผ์ด์ธํธ๊ฐ ํ์ฌ ์กฐ์ธํ ๋ชจ๋ ๋ฃธ์ ๋ฆฌ์คํธ๋ฅผ ๋ฐํ
socket.id: ์์ผ์ ๊ณ ์ ์๋ณ์๋ฅผ ๋ฐํ