본문 바로가기
JAVASCRIPT/NodeJS

[NodeJS] TCP Socket Server 구성하기

by 원동호 2020. 12. 1.
반응형

TCP


Node.js에서 제공되는 스트림 소켓을 사용하며 연결형 소켓이다.

연결형 소켓이므로 신뢰성이 보장되며 세션 관리가 중요하다.

 

event
  • close : 서버가 닫힌후에 이벤트 발생
  • connection : 새로운 연결이 만들어지면 이벤트 발생 
  • error : 에러 발생 시 이벤트 발생, 'close'이벤트는 이 이벤트가 발생한 후 직접 호출
  • listening : server.listen() 함수 호출 후 bind되었을때 이벤트 발생
  • end : 클라이언트 소켓 세션이 끊어졌을때(FIN Packet을 받았을 때) 이벤트 발생
  • data : 클라이언트 소켓으로부터 데이터를 수신받았을 때 이벤트 발생
  • timeout : 소켓 세션이 비활성화 되었을 때 시간 초과될때 발생되는 이벤트
//TCP
const net = require('net');

//클라이언트 저장할 배열
let clients = [];
let tServer = net.createServer(function(client) {
    logger.info("connection : "+client.remotePort);

    logger.info('Client connection');
    logger.info('   local = '+ client.localAddress +':'+ client.localPort);
    logger.info('   remote ='+ client.remoteAddress+':'+ client.remotePort);
    logger.info('   client ='+ JSON.stringify(client));
    
    //클라이언트 정보 저장
    clients.push(
        {
            name : client.remotePort,
            client : client
        }
    );    
    
    logger.info("connection clients list : "+ clients);
    client.setEncoding('utf8');
    
    client.on('data', function(data) {
        logger.info('클라이언트로부터 받은 remort port  : '+ client.remotePort +' / 데이터 : '+ data.toString());
		//데이터를 발신한 소켓 클라이언트에게 메시지 발신
        client.write('ok');
    });

    
    client.on('end', function() {
    	//클라이언트 소켓이 커넥션을 끊었을때 
        logger.info("end connection : "+client.remotePort);
        logger.info(client.remoteAddress + ' Client disconnected');
        let idx = clients.indexOf(clients.name);
        clients.splice(idx,1);
        logger.info(clients);
    });
    
    client.on('error', function(err) {
        logger.info('Socket Error: ', JSON.stringify(err));
    });
    
    client.on('timeout', function() {
        logger.info('Socket Timed out');
    });

});
 
tServer.listen(config.TCP_PORT, function() {
    logger.info('TCP Server listening on : ' + JSON.stringify(tServer.address()));
    tServer.on('close', function(){
        logger.info('Server Terminated');
    });
    tServer.on('error', function(err){
        logger.info('Server Error: ', JSON.stringify(err));
    });
});

 

도움이 되셨다면 하트 및 댓글 부탁드립니다♥

반응형

댓글