클라이언트 코드
<!doctype html>
<html>
<head>
<title>Socket.IO chat</title>
</head>
<body>
<ul id="messages"></ul>
<input id="m" autocomplete="off" /><button onclick="handleClick()">Send</button>
<!-- 클라이어트 라이브러리는 script tag의 src 어트리뷰트값으로 “/socket.io/socket.io.js”을 지정하면 된다. 실제 path에 socket.io.js 파일을 배치할 필요는 없다. 그 이유는 socket.io가 서버 기동 시에 socket.io.js 라이브러리를 자동 생성해 주기 때문이다. -->
<script src="/socket.io/socket.io.js"></script>
<script>
const $btn = document.querySelector('button');
let socket = io();
socket.emit('login', {
name: makeRandomName(),
userid: 'jing0716@gmail.com'
})
socket.on('login', function (data) {
const $ul = document.querySelector('#messages');
const $li = document.createElement('li');
$li.textContent = data
$ul.append($li);
})
socket.on('chat', function(data) {
const $ul = document.querySelector('#messages');
const $li = document.createElement('li');
$li.textContent = data.msg;
$ul.append($li);
})
function handleClick(event) {
event.preventDefault();
const $input = document.querySelector('#m');
const data = $input.value;
console.log(data);
socket.emit("chat", { msg: data});
}
function makeRandomName(){
var name = "";
var possible = "abcdefghijklmnopqrstuvwxyz";
for( var i = 0; i < 3; i++ ) {
name += possible.charAt(Math.floor(Math.random() * possible.length));
}
return name;
}
$btn.addEventListener('click', handleClick);
</script>
</body>
</html>
서버 코드
let app = require('express')();
let http = require('http').createServer(app);
let io = require('socket.io')(http);
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
})
io.on('connection', (socket) => {
socket.on('login', (data) => {
console.log('message :' + data )
socket.name = data.name;
socket.userid = data.userid;
io.emit('login', data.name);
})
socket.on('chat', function(data) {
console.log('Message from %s: $s', socket.name, data.msg);
let msg = {
from: {
name: socket.name,
userid: socket.userid
},
msg: data.msg
};
io.emit('chat', msg);
})
})
http.listen(3000, () => {
console.log("listening on *:3000");
})