티스토리 뷰
socket.io를 이용한 실시간서비스
socket.io모듈
install
$ npm init
......
$ npm install --save socket.io
server.js
const io = require('socket.io')(3000);
io.on('connection', (socket) => {
console.log('클라이언트 연결');
// console.log('클라이언트 :', socket);
console.log('클라이언트 id :', socket.id);
// 원격 호스트 접속 종료 이벤트
socket.on('disconnect', () => {
console.log('클라이언트 연결 종료');
});
});
client test
Socket.io tester
로 접속 시
클라이언트 연결
클라이언트 id : ZUmxCGQbYdRidCVBAAAA
argument가 있는 이벤트 전달
server.js
const io = require('socket.io')(3000);
io.on('connection', (socket) => {
console.log('클라이언트 연결');
socket.on('hello', () => {
console.log('hello 발생')
});
socket.on('say', (data1, data2) => {
console.log(`say 발생. ${data1}, ${data2}`)
});
socket.on('echo', (msg) => {
console.log(`echo 이벤트 발생 : ${msg}`)
socket.emit('echo-back', msg);
});
// 원격 호스트 접속 종료 이벤트
socket.on('disconnect', () => {
console.log('클라이언트 연결 종료');
});
});
client test
클라이언트 연결
say 발생. , undefined
say 발생. 123, undefined
say 발생. 123
123, undefined
say 발생. 123, 123, undefined
say 발생. 123, fffa
echo 이벤트 발생 : 123
이벤트 처리 후 클라이언트에 메세지 전달 (위와 같은 예제)
socket.on('echo', (msg) => {
console.log(`echo 이벤트 발생 : ${msg}`)
socket.emit('echo-back', msg);
});
시스템에서 클라이언트로 메세지 전달하기
server.js
const express = require('express');
const http = require('http');
const app = express();
const server = http.createServer(app);
server.listen(3000);
app.get('/', (req, res) => {
res.sendFile(__dirname + '/namespace.html');
});
const io = require('socket.io')(server);
io.on('connection', (socket) => {
console.log('클라이언트 접속');
socket.on('message', (data) => {
console.log('message from client : ', data['message']);
socket.emit('echo', data);
});
socket.on('disconnect', () => {
console.log('Disconnected');
});
});
// 키보드 입력
const is = process.stdin;
// System Namespace
var system = io.of('/system');
system.on('connection', (socket) => {
console.log('emergency namespace connected');
is.on('data', (chunk) => {
console.log('emergency namespace!');
socket.emit('message', { msg: chunk.toString() });
});
});
namespace.html
<html>
<head>
<meta charset="UTF-8">
<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script>
var socket = io();
socket.on('connect', function () {
console.log('server connect');
});
socket.on('echo', function (data) {
var msg = data['message'];
console.log('Server Event :', msg);
$('#serverEcho').append($('<li>').text(msg));
});
function sendMessage() {
var userInput = $('#userInput').val();
socket.emit('message', { message: userInput });
$('#userInput').val('');
}
var system = io('/system');
system.on('connect', function () {
console.log('System Namespace connect');
});
// 시스템 메세지는 얼럿창으로
system.on('message', function (data) {
alert('Emergency : ' + data.msg);
});
</script>
</head>
<body>
<div id="clientInput">
<input type="text" id="userInput" class="input" />
<input type="button" class="submit" value="Send" onclick="sendMessage()" />
</div>
<h3>Server Echo</h3>
<ul id="serverEcho">
</ul>
</body>
</html>
'Develop > Node.js' 카테고리의 다른 글
[node.js] session 관련 모듈 (1) | 2018.06.24 |
---|---|
[node.js] transmission (0) | 2018.05.13 |
[node.js] Callback 지옥에서 벗어나보기 (0) | 2018.03.26 |
[node.js] 'url' module (0) | 2018.03.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크