반응형

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의 값이 같은 사람들끼리 채팅을 할 수 있다...

 

채팅 내용은 디비에 저장된다....

 

개발하다 힘들면 눌러.

https://www.zzarbang.com

반응형

+ Recent posts