Socket.io: ๋ธŒ๋ผ์šฐ์ € ์ƒˆ๋กœ ๊ณ ์นจ ์‹œ ์ด์ „ ์—ฐ๊ฒฐ๋กœ ๋‚ด๋ณด๋‚ด๊ณ  ์ด์ „ ์—ฐ๊ฒฐ ์œ ์ง€

์— ๋งŒ๋“  2016๋…„ 02์›” 01์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: socketio/socket.io

์•ˆ๋…•,

ํ˜„์žฌ Date()๋ฅผ ๋‹จ์ผ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ณด๋‚ด๋Š” ๊ฐ„๋‹จํ•œ socket.io ์„œ๋ฒ„ ํ…Œ์ŠคํŠธ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1์ดˆ๋งˆ๋‹ค ์„œ๋ฒ„๋Š” Date()๋ฅผ ํ•˜๋‚˜์˜ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋ƒ…๋‹ˆ๋‹ค(๋ฐฉ์ถœ).

๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ์ƒˆ๋กœ ๊ณ ์น˜๋ฉด ์—ฌ์ „ํžˆ ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์ด ์žˆ์ง€๋งŒ ์„œ๋ฒ„๋Š” ๋‘ ๊ฐœ์˜ ์—ฐ๊ฒฐ์„ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ์ƒˆ๋กœ ๊ณ ์น˜๋ฉด ์—ฌ์ „ํžˆ ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์ด ์žˆ์ง€๋งŒ ์„œ๋ฒ„๋Š” ์„ธ ๊ฐœ์˜ ์—ฐ๊ฒฐ์„ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ์ฐฝ์„ ์ƒˆ๋กœ ๊ณ ์น˜๋ฉด ์—ฌ์ „ํžˆ ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์ด ์žˆ์ง€๋งŒ ์„œ๋ฒ„๋Š” 4๊ฐœ์˜ ์—ฐ๊ฒฐ์„ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

๋“ฑ๋“ฑ ๋“ฑ๋“ฑ...

๋ช‡ ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„์—๋„ ์—ฐ๊ฒฐ์ด ๋Š๊ธด ํด๋ผ์ด์–ธํŠธ๋Š” ์—ฌ์ „ํžˆ ์„œ๋ฒ„์—์„œ ๋‚ด๋ณด๋‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์„œ๋ฒ„๊ฐ€ ์ด์ „ ์—ฐ๊ฒฐ์„ ๋Š๊ฑฐ๋‚˜ ๋‹ซ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์˜ˆ์ƒ๋œ ๋™์ž‘์ž…๋‹ˆ๊นŒ?

Node v5.4.1๊ณผ ํ•จ๊ป˜ Socket.io v1.4.5๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ฝ”๋“œ ์ƒ˜ํ”Œ์ž…๋‹ˆ๋‹ค.

io.on('connection', function (socket) {

  // console.log(socket.connected);
  console.log('===================');

  setInterval(() => {
    console.log(socket.conn.id);
    socket.emit('data', { ts: new Date() });
  }, 1000);

});

๋‹ค์Œ์€ 2์ดˆ๋งˆ๋‹ค ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ ๊ณ ์น  ๋•Œ์˜ console.log ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค.

๊ฐ ๋ธŒ๋ผ์šฐ์ € ์ƒˆ๋กœ ๊ณ ์นจ์— ๋Œ€ํ•œ socket.conn.id๊ฐ€ ๋‚ด๋ณด๋‚ด์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โฏ node app.js                                                                                                                                       โŽ
===================
kkizbfn-82gNOsyAAAAA
kkizbfn-82gNOsyAAAAA
===================
kkizbfn-82gNOsyAAAAA
m_ft38Y4XEY7W97VAAAB
kkizbfn-82gNOsyAAAAA
m_ft38Y4XEY7W97VAAAB
===================
kkizbfn-82gNOsyAAAAA
m_ft38Y4XEY7W97VAAAB
xH09a5Olle4A-HSNAAAC
kkizbfn-82gNOsyAAAAA
m_ft38Y4XEY7W97VAAAB
xH09a5Olle4A-HSNAAAC
===================
m_ft38Y4XEY7W97VAAAB
xH09a5Olle4A-HSNAAAC
kkizbfn-82gNOsyAAAAA
_GmZXIXg8VgUrdKlAAAD
m_ft38Y4XEY7W97VAAAB
xH09a5Olle4A-HSNAAAC
kkizbfn-82gNOsyAAAAA
_GmZXIXg8VgUrdKlAAAD

๋งŽ์€ ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„์—๋„ ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)๊ฐ€ ์—†์–ด๋„ ์ด์ „ ์—ฐ๊ฒฐ์ด ๊ณ„์† ๋‚ด๋ณด๋‚ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@StevenBock ์•„ ์•Œ์•˜์–ด .. ๋„ค ๋‹ค ์ข‹์Šต๋‹ˆ๋‹ค - ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ๋‹ค๋ฅธ ์˜ˆ์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ์— ๊ผฌ๋ฆฌ๋ฅผ ๋ถ™์ด๊ณ  ๊ฐ ์ƒˆ ์ค„์„ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

npm 'tail' ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์ฝ”๋“œ๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ ์ด์ „ ์—ฐ๊ฒฐ ๋ฌธ์ œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

const io = require('socket.io')(8080);

const Tail = require('tail').Tail;
const tailTmpFile = new Tail("./tmp.txt");

io.on('connection', function (socket) {

  console.log(socket.conn.id);

  tailTmpFile.on("line", function (data) {
      console.log('emitting Yes: ', socket.conn.id);
      socket.emit('file', { data: data, ts: Date() });
  });

});

์–ด๋–ป๊ฒŒ๋“  ์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ๋Š๊ธธ ๋•Œ ๊ผฌ๋ฆฌ ์ด๋ฒคํŠธ(tailTmpFile.on)๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  4 ๋Œ“๊ธ€

clearInterval์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ ํ•ด์ œ ์‹œ ๊ฐ„๊ฒฉ์„ ์ง€์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

var oneSecondInterval = setInterval(() => {
    console.log(socket.conn.id);
    socket.emit('data', { ts: new Date() });
  }, 1000);

socket.on('disconnect', function(){
    clearInterval(oneSecondInterval);
});

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด์ „ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

@StevenBock ์•„ ์•Œ์•˜์–ด .. ๋„ค ๋‹ค ์ข‹์Šต๋‹ˆ๋‹ค - ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ด ๋‹ค๋ฅธ ์˜ˆ์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ์— ๊ผฌ๋ฆฌ๋ฅผ ๋ถ™์ด๊ณ  ๊ฐ ์ƒˆ ์ค„์„ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

npm 'tail' ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์ฝ”๋“œ๋Š” ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ ์ด์ „ ์—ฐ๊ฒฐ ๋ฌธ์ œ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

const io = require('socket.io')(8080);

const Tail = require('tail').Tail;
const tailTmpFile = new Tail("./tmp.txt");

io.on('connection', function (socket) {

  console.log(socket.conn.id);

  tailTmpFile.on("line", function (data) {
      console.log('emitting Yes: ', socket.conn.id);
      socket.emit('file', { data: data, ts: Date() });
  });

});

์–ด๋–ป๊ฒŒ๋“  ์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ๋Š๊ธธ ๋•Œ ๊ผฌ๋ฆฌ ์ด๋ฒคํŠธ(tailTmpFile.on)๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@StevenBock ์ข‹์Šต๋‹ˆ๋‹ค. ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ๋Š” ์—ฐ๊ฒฐ ํ•ด์ œ ์‹œ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

io.on('connection', function (socket) {

  console.log(socket.conn.id);

  var emitLine = function () {
    var callback = function (data) {
      socket.emit('file', { data: data, ts: Date() });
    }
    tailTmpFile.on("line", callback);

    // dispose function
    return function() {
      tailTmpFile.removeListener('line', callback);
    }
  }();

  socket.on('disconnect', function () {
    // dispose tail file listener
    emitLine();
  });

});

์‹œ๊ฐ„์„ ๋‚ด์–ด ๋‹ต๋ณ€ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ์•ˆ๋‚ดํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฑด๋ฐฐ.

๋„์›€์ด ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰