>  기사  >  웹 프론트엔드  >  nodejs_node.js에 구현된 간단한 채팅방 기능 공유

nodejs_node.js에 구현된 간단한 채팅방 기능 공유

WBOY
WBOY원래의
2016-05-16 16:28:461468검색

오늘은 백그라운드에서 nodejs를 사용하고 클라이언트와 서버 간 통신을 위해 소켓.io를 사용하는 간단한 채팅방을 구현하겠습니다. 이는 비교적 성숙한 웹소켓 프레임워크입니다.

초기작업

1. express를 설치하고 이를 사용하여 source.io 및 정적 페이지를 호스팅합니다. npm install express --save, --save 패키지를 package.json 파일에 추가합니다. 2.socket.io를 설치하고 npm installsocket.io --save 명령을 실행합니다.

서버 코드 작성

socket.io는 초기 연결을 위해 http 프로토콜이 필요하기 때문에 먼저 express를 통해 웹사이트를 호스팅하고 이를 소켓.io 인스턴스에 연결합니다


코드 복사 코드는 다음과 같습니다.
var express = require('express'),
​ io = require('socket.io');
var app = express();

app.use(express.static(__dirname));

var 서버 = app.listen(8888);

var ws = io.listen(서버);

서버 연결 이벤트를 추가합니다. 클라이언트 연결이 성공하면 모든 온라인 사용자에게 알림이 전송됩니다. 사용자가 메시지를 보내면 다른 사용자에게 알림이 전송됩니다.

코드 복사 코드는 다음과 같습니다.
ws.on('연결', 함수(클라이언트){
console.log(' Client.on('join', function(msg){
             // 중복이 있는지 확인
           if(checkNickname(msg)){
                client.emit('nickname', '닉네임이 중복되었습니다!');
         }그 외{
Client.nickname = msg;
                 ws.sockets.emit('announcement', 'System', msg '채팅방에 참여했습니다!');
}
});
// 메시지 보내기 듣기
Client.on('send.message', function(msg){
Client.broadcast.emit('send.message',client.nickname, msg);
});
// 연결이 끊어지면 다른 사용자에게 알립니다.
Client.on('disconnect', function(){
If(클라이언트.닉네임){
Client.broadcast.emit('send.message','System', client.nickname '채팅방에서 나가세요!');
}
})

})


클라이언트는 닉네임으로 식별되므로 서버에서는 중복된 닉네임을 감지하는 기능이 필요합니다

//닉네임이 반복되는지 확인
var checkNickname = 함수(이름){
for(ws.sockets.sockets의 var k){
If(ws.sockets.sockets.hasOwnProperty(k)){
If(ws.sockets.sockets[k] && ws.sockets.sockets[k].nickname == 이름){
                   true를 반환합니다.
            }
}
}
거짓을 반환합니다.
}


클라이언트 코드 작성

서버는 타사 websokcet 프레임워크를 사용하므로 프런트엔드 페이지는 소켓.io 클라이언트 코드를 별도로 참조해야 합니다. 소스 파일은 Windows의 경로는 node_modulessocket에서 찾을 수 있습니다. ionode_modulessocket.io-clientdist는 다음과 같습니다. 개발 버전과 압축 버전의 경우 기본적으로 개발 버전만 인용하시면 됩니다.

프런트엔드는 주로 입력된 닉네임 확인과 메시지 처리를 담당합니다.

코드 복사 코드는 다음과 같습니다.




    socket.io 聊天室例子