๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

node.js

[Node.js] socket.io๋กœ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ตฌํ˜„ํ•˜๊ธฐ (1)

๐Ÿ”จ socket.io Install

socket.io๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์‹œ๊ฐ„์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์—์„œ ๋ฐ˜์‘์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์‹ค์‹œ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์›น์†Œ์ผ“์„ ์œ„ํ•œ ๋ชจ๋“ˆ์ด๋‹ค.

npm install --save socket.io

 

โœจ ์ด๋ฒคํŠธ์˜ ์˜๋ฏธ

์ด๋ฒคํŠธ๋Š” ์›น์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋Š” '๋‹จ์œ„'๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๋Š”๋ฐ, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„์—์„œ ์ด๋ฒคํŠธ ๋‹จ์œ„๋กœ ๊ฐ ์ž‘์—…์„ ๋งค์นญํ•˜๊ฒŒ ๋œ๋‹ค.

  • connection : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐํ• ๋•Œ ๋ฐœ์ƒํ•˜๋ฉฐ, socket๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • disconnect : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ์„ ํ•ด์ œํ•  ๋•Œ ๋ฐœ์ƒ
  • ์ด์™ธ์˜ ์ด๋ฒคํŠธ๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ์„ ํ•˜๋“ฏ์ด ํ•„์š”์— ๋”ฐ๋ผ ์ง์ ‘ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์„ ์–ธ์„ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์ฝ”๋“œ๋ฅผ ๋น„๊ตํ–ˆ์„๋•Œ,

// ์„œ๋ฒ„ 
socket.on('์ด๋ฒคํŠธ1', (data) => {
   '์ด๋ฒคํŠธ1'์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์„œ๋ฒ„์—์„œ์˜ ๋ฐ˜์‘ 
});

// ํด๋ผ์ด์–ธํŠธ 
socket.on('์ด๋ฒคํŠธ1', (data) => {
  '์ด๋ฒคํŠธ1'์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํด๋ผ์ด์–ธํŠธ์—์„œ์˜ ๋ฐ˜์‘ 
});

socket.emit('์ด๋ฒคํŠธ1', data); // ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ฝ”๋“œ 

๐Ÿ‘‰ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์ฝ”๋“œ๋Š” ์œ„์™€ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๋ชจ๋‘ .on์„ ํ†ตํ•ด ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๋ฐ˜์‘์„ ์ •์˜ํ•œ๋‹ค. ์ด๋•Œ, .emit์„ ํ†ตํ•ด์„œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ , ๊ทธ์— ๋”ฐ๋ผ ๊ฐ๊ฐ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด๋‘” ๋ฐ˜์‘์„ ํ•˜๊ฒŒ๋œ๋‹ค.


 

๐Ÿ“ข ์ž์ฃผ ์“ฐ์ด๋Š” ๋ฉ”์†Œ๋“œ

  • on() : ์†Œ์ผ“ ์ด๋ฒคํŠธ๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค. ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ํ–‰๋™์„ ์ •์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.
  • emit() : ์†Œ์ผ“ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
  • listen() : ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰, ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.
  • to() = in() : ํŠน์ • ํด๋ผ์ด์–ธํŠธ ์ถ”์ถœ

์œ„ ๋ฉ”์†Œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„ ์ฝ”๋“œ ์˜ˆ์‹œ

var io = socketio.listen(server);

io.sockets.on('connection', (socket) => {
	socket.on('์ด๋ฒคํŠธ1', (data) => {
		console.log('client๊ฐ€ ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ: ', data);
		socekt.emit('์ด๋ฒคํŠธ2', data); 
		// ์ด๋ฒคํŠธ1์„ ์—ฐ๊ฒฐํ•˜๊ณ , ๋ฐœ์ƒํ• ๋•Œ ์ด๋ฒคํŠธ2๋ฅผ ๋ฐœ์ƒ & ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ
	});
	// ์œ„์™€ ๊ฐ™์ด ์ด๋ฒคํŠธ ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. 
});

 

๐Ÿ‘จ‍๐Ÿ‘ฉ‍๐Ÿ‘ฆ‍๐Ÿ‘ฆ ์ฑ„ํŒ…๋ฐฉ ์ƒ์„ฑ, ์ ‘์†ํ•˜๊ธฐ

  • join() : ํŠน์ • ROOM์— ์ ‘์†
    ํŠน์ • room์—๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ผ ๋•Œ๋Š” io.to()๋ฅผ ์ด์šฉํ•œ๋‹ค.
io.sockets.on('connection', (socket) => {
	var roomName = null;

	socket.on('join', (data) => {
		roomName = data;
		socket.join(data);
	});
	
	socket.on('message', (data) => {
		io.sockets.in(roomName).emit('message', 'test');
		// ํŠน์ • ๋ฐฉ์— ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ๋งŒ ๋ฉ”์‹œ์ง€ ์ „์†ก 
	});
});

โœŒ ์ „์ฒด ์ฑ„ํŒ…์„ ๊ตฌํ˜„ํ•˜๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋Š” ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ์•Œ์•„๋ณด๊ฒ ๋‹ค

 

๋ฐ˜์‘ํ˜•