카테고리 없음

[Node.js] node.js, socket.io를 이용한 웹 채팅

오늘보다 더 나은 내일을 위해 2020. 10. 20. 16:07

socket.io를 이용한 기본 웹 채팅을 구현해보겠습니다

 

$ npm express --view=ejs chatting
$ npm install
$ npm install socket.io --save

 

 

./io.js

modeule.exports = server =>{
	let io = require('socket.io')(server);
    
    io.on('connection', socket => {
    	socket.on('message', msg =>{
            console.log(msg);
            socket.emit('Mmessage', msg);
            socket.emit('Omessage', msg);
        });
    });
    return io;
}

'connection' 이벤트가 발생하면  io.js에서 받아서 처리해줍니다.

'connection' 이벤트 후에 'message' 이벤트가 발생하면 메시지를 콘솔에 출력해주고 채팅창에 표시하기 위해 'Mmessage'와 'Omessage' 이벤트를 발생시킵니다.

 

 

./bin/www 수정

var server = http.createServer(app)

let io = require('../io.js')(server)
// 이부분을 추가해줍니다

io 객체를 모듈화 하여 www 파일에서 실행시키도록 합니다

 

./routes/index.js

router.get('/chat', (req, res, next) => {
	res.render('chatting');
});

index 파일에서는 크게 해줄게 없습니다.

 

./view/chat.ejs

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Chatting</title>
    <script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.1/socket.io.js"></script>
    <link href="/stylesheets/style.css" rel="stylesheet"/>
 
  <script>
    $(function(){
      let socket = io('http://localhost:4000');

      
      socket.on('Mmessage', msg => {
        $('#messages').append($('<p class="talk me">').text(msg));
      });
      socket.on('Omessage', msg => {
        $('#messages').append($('<p class="talk other">').text(msg));
      });
  
      $("#msinput").keyup(function(key){
        if(key.keyCode==13){    // 엔터 눌렀을 때
          
          socket.emit('message', $("#msinput").val());
          $("#msinput").val('');
         
        }
      });

      $("#btns").on('click', function(){   // 전송 버튼 눌렀을 때
          socket.emit('message', $("#msinput").val());
          $("#msinput").val('');
          
      });

    })
  </script>
  </head>

  <body>
    <div class="background" >
      <div class ="msgbox" id="messages"> </div>
      <input id="msinput" class="msg" type="text"/>
      <button id="btns" class="send" type="button">전송</button>
    </div>
  </body>



</html>

 

 

./public/stylesheets/style.css

필요하신 분은 사용하세요

더보기

body {

  font12px 'Lucida Grande'HelveticaArialsans-serif;

}

 

.background {

  background-color#c1aeee;

  padding15px;

  width250px;

}

 

.talk {

  positionrelative;

  padding15px;

  margin1em 0 1em;

  colorblack;

  -webkit-border-radius10px;

  -moz-border-radius10px;

  border-radius10px;

  widthauto;

}

 

.talk.me {

  margin-left30px;

  border5px solid #fff;

  background#fff;

}

 

.talk.other {

  margin-right30px;

  border5px solid #fff;

  background-color#fff;

}

 

.msg {

  displayinline-block;

  height34px;

  padding6px 12px;

  font-size14px;

  line-height1.42857;

  color#555555;

  background-color#fff;

  background-imagenone;

  border0px solid #ccc;

  border-top-left-radius4px;

  border-bottom-left-radius4px;

}

 

.send {

  background-color#fff;

  displayinline-block;

  margin-bottom0;

  font-weightnormal;

  text-aligncenter;

  vertical-alignmiddle;

  border0px solid transparent;

  height46px;

  padding6px 12px;

  font-size14px;

  line-height1.42857;

  border-top-right-radius4px;

  border-bottom-right-radius4px;

}

 

.msgbox {

  widthauto;

  height500px;

  overflowauto;

}

.msgbox::-webkit-scrollbar {

  width10px;

}

.msgbox::-webkit-scrollbar-thumb {

  background-color#cfe2f5;

  border-radius10px;

  background-clippadding-box;

  border2px solid transparent;

}

.msgbox::-webkit-scrollbar-track {

  background-color#c1aeee;

  border-radius10px;

  box-shadowinset 0px 0px 5px white;

}

/*# sourceMappingURL=style.css.map */

 

 

 

 

 

결과