반응형
nodejs를 이용해서 조금더 재밌는 작업을 해보자...
방을 여러개 만들수 있도록 하고 또 채팅내용을 디비에 저장하는것도 해보자...
디비는 mysql이다.
먼저 js파일을 보자...
var http = require('http');
var fs = require('fs');
var socketio = require('socket.io');
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
port:3306,
user:'****',
password:'****',
database:'python'
})
connection.connect();
var server = http.createServer(function(req, res){
fs.readFile('index.html', 'utf8', function(err, data){
res.writeHead(200, {'Content-Type':'text/html'});
res.end(data);
});
}).listen(8888, function(){
console.log('Running ~~~~~~~~~~~~');
});
var io = socketio(server);
var chat=io.sockets.on('connection', function(socket){
socket.on('sMsg', function(data){
var room = data.room;
connection.query("INSERT INTO chat (room, uname, msg) VALUES (?, ?, ?)", [
data.room, data.name, data.msg
], function(){
//console.log('Data Insert OK');
});
socket.join(room);
chat.to(room).emit('rMsg', data);
});
});
디비랑 연결하기 위한 connection을 생성한다...
room값을 받아서 테이블에 넣어준다...이름과 메세지도 넣어준다...
js파일을 실행할땐 pm2를 이용한다.
pm2 start socke.js
이렇게 실행해주면 데몬이 죽었을때 pm2가 알아서 다시 살려준다...
이번엔 index.html을 보자...
<!DOCTYPE>
<html>
<head>
<style>
#container {
width: 400px;
border: 1px dotted #000;
padding: 10px;
height: 328px;
}
#chatBox {
border: 1px solid #000;
width: 400px;
height: 300px;
margin-bottom: 5px;
}
#chat li {
padding: 5px 0px;
}
#name {
width: 78px;
}
#msg {
width: 256px;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.5/socket.io.min.js"></script>
<script type="text/javascript">
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
window.onload = function(){
var socket = io.connect();
var room = getParameterByName('room');
if(socket != null && socket != undefined){
var welcome = document.createElement('li');
welcome.innerHTML = '<system> Start Chatting';
document.getElementById('chat').appendChild(welcome);
socket.on('rMsg', function(data){
var li = document.createElement('li');
li.innerHTML = data.name + ' : ' + data.msg;
document.getElementById('chat').appendChild(li);
});
document.getElementById('submit').onclick = function(){
var val = document.getElementById('msg').value;
var name = document.getElementById('name').value;
socket.emit('sMsg', {
name : name,
msg : val,
room : room
});
document.getElementById('msg').value = '';
};
}
};
</script>
</head>
<body>
<div id="container">
<div id="chatBox">
<ul id="chat"></ul>
</div>
<input type="text" id="name"/>
<input type="text" id="msg"/>
<button id="submit">Chat</button>
</div>
</body>
</html>
room이라는 변수를 Get값으로 받아온다.
채팅창의 submit를 누르면 이름과 메세지 그리고 room의 값을 소켓에 보낸다.
채팅창을 부를때 URL은
http://0.0.0.0:8888/?room=room1
이렇게 room의 값을 넣어서 호출한다...
room의 값이 같은 사람들끼리 채팅을 할 수 있다...
채팅 내용은 디비에 저장된다....
개발하다 힘들면 눌러.
반응형
'nodejs' 카테고리의 다른 글
node를 이용해 kafka 서버에 메세지 등록하고 메세지 읽기 (2) | 2019.03.26 |
---|---|
node와 web3를 이용한 이더 전송과 트랜잭션 확인 (0) | 2019.03.15 |
node와 web3를 이용해 블럭넘버와 계정 조회하기 (0) | 2019.03.15 |
npm으로 web3 설치할때 만나는 에러 해결 (0) | 2019.03.15 |
nodejs로 채팅 구현하기 (0) | 2018.11.14 |