์๋ ,
ํ์ฌ 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
๋ง์ ์๊ฐ์ด ์ง๋ ํ์๋ ์ฐ๊ฒฐ๋ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๊ฐ ์์ด๋ ์ด์ ์ฐ๊ฒฐ์ด ๊ณ์ ๋ด๋ณด๋ด์ง๊ณ ์์ต๋๋ค.
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();
});
});
์๊ฐ์ ๋ด์ด ๋ต๋ณํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ ๋ง ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ์๋ดํด ์ฃผ์์ต๋๋ค.
๊ฑด๋ฐฐ.
๋์์ด ๋์ด ๊ธฐ์ฉ๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@StevenBock ์ ์์์ด .. ๋ค ๋ค ์ข์ต๋๋ค - ๊ฐ์ฌํฉ๋๋ค!
์ด ๋ค๋ฅธ ์์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
ํ์ผ์ ๊ผฌ๋ฆฌ๋ฅผ ๋ถ์ด๊ณ ๊ฐ ์ ์ค์ ํด๋ผ์ด์ธํธ์ ๋ณด๋ด๊ณ ์ถ์ต๋๋ค.
npm 'tail' ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ์ด ์ฝ๋๋ ์ ์์ ์ผ๋ก ์๋ํ์ง๋ง ์ด์ ์ฐ๊ฒฐ ๋ฌธ์ ๋ฅผ ์ ์งํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ด๋ป๊ฒ๋ ์์ผ ์ฐ๊ฒฐ์ด ๋๊ธธ ๋ ๊ผฌ๋ฆฌ ์ด๋ฒคํธ(tailTmpFile.on)๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.