Node.js 기반 웹 소켓 통신 구현
node 에서 Websocket 을 실현 하 는 의존 패 키 지 는 매우 많 습 니 다.websocket,ws 가 모두 가능 합 니 다.본 고 는 ws 를 선택 하여 실현 하고 먼저 의존 도 를 설치 합 니 다.
npm install ws
채 팅 방 실례만약 에 A,B,C,D 사용자 가 클 라 이언 트 를 통 해 Websocket 서비스 에 연결 된다 면 그 중에서 모든 사람 이 보 낸 메 시 지 는 Websocket 을 통 해 다른 사람 에 게 전달 해 야 한다.이 장면 은 서버 에서 A 의 메 시 지 를 팀 내 다른 사용자 에 게 방송 하 는 것 과 유사 하 다.
서버 구현
먼저 서버 프로그램 을 살 펴 보고 구체 적 인 워 크 플 로 는 다음 과 같은 몇 단계 로 나 뉜 다.
서버 코드
var WebSocketServer = require('ws').Server,
wss = new WebSocketServer({port: 8080});
//
var clients = [];
wss.on('connection', function(ws) {
//
clients.push(ws);
ws.on('message', function(message) {
//
clients.forEach(function(ws1){
if(ws1 !== ws) {
ws1.send(message);
}
})
});
ws.on('close', function(message) {
// ,
clients = clients.filter(function(ws1){
return ws1 !== ws
})
});
});
클 라 이언 트 구현
<html>
<input type="text" id="text">
<input type="button" onclick="sendMessage()" value="online">
<script>
var ws = new WebSocket("ws://localhost:8080");
ws.onopen = function (e) {
console.log('Connection to server opened');
}
ws.onmessage = function(event) {
console.log('Client received a message', event);
};
ws.onclose = function (e) {
console.log('connection closed.');
}
function sendMessage() {
ws.send(document.getElementById('text').value);
}
</script>
</html>
어떻게 사용 자 를 발견 합 니까?상기 demo 를 통 해 알 수 있 듯 이 웹 소켓 은 모두 연결 을 바탕 으로 한다.즉,우 리 는 data 가 그 connection 에서 보 내 온 것 을 알 지만 클 라 이언 트 를 사용 하 는 것 이 리 레이 나 한 매 매 매 라 는 것 을 모 르 면 어떻게 해 야 합 니까?또 다른 장면 을 생각하면 리 레이 는 한 매 매 에 게 만 메 시 지 를 보 내 고 다른 클 라 이언 트 에 게 메 시 지 를 방송 하고 싶 지 않다.이때 우 리 는 서버 에서 사용자 의 신분 과 연결 의 대응 관 계 를 표시 할 수 있어 야 한다.
그래서 클 라 이언 트 가 웹 소켓 에 연결 한 후에 다시 한 번 요청 을 해서 서버 에 내 user 를 알려 야 합 니 다.id 가 얼마 인지 서버 에서 이 userid 와 connection 간 의 관 계 는 hashmap 에 저장 되 어 있 으 며,이로써 userid 와 connection 의 대응 관계.대응 하 는 클 라 이언 트 에 게 메 시 지 를 보 내야 할 때 hashmap 에서 해당 하 는 사용자 의 connection 정 보 를 꺼 내 send 방법 으로 메 시 지 를 보 내 면 됩 니 다.
의존 가방
npm install hashmap
서버 구현
var WebSocketServer = require('ws').Server, webSocketServer = new WebSocketServer({port: 8080});
var HashMap = require('hashmap');
// record the client
var userConnectionMap = new HashMap();
var connectNum = 0;
// connection
webSocketServer.on('connection', function(ws) {
++ connectNum;
console.log('A client has connected. current connect num is : ' + connectNum);
ws.on('message', function(message) {
var objMessage = JSON.parse(message);
var strType = objMessage['type'];
switch(strType) {
case 'online' :
userConnectionMap.set(objMessage['from'], ws);
break;
default:
var targetConnection = userConnectionMap.get(objMessage['to']);
if (targetConnection) {
targetConnection.send(message);
}
}
});
ws.on('close', function(message) {
var objMessage = JSON.parse(message);
userConnectionMap.remove(objMessage['from']);
});
});
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Node.js를 AWS서버에서 사용하는 실습간단한 예제와 함께 AWS에서 Node.js를사용하는 법을 배워보도록 하겠다. 해당 github에 있는 레포지토리로 사용을 할 것이다. 3000번 포트로 Listen되는 예제이고 간단히 GET, POST, DELET...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.