티스토리 뷰

Develop/Node.js

[node.js] 'socket.io' module

Nebori 2018. 6. 17. 22:05

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
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31