socket 대표적인 이벤트들
- data
서버가 클라이언트로부터 데이터를 받을 때마다 발생한다. 데이터는 버퍼 형태로 제공되며 이를 문자열로 변환 혹은 원하는 형식으로 처리가능하다. 주로 요청을 처리 , 응답을 준비 할 경우 사용한다. - end
한쪽의 연결이 끝난경우에 발생한다. 소켓의 다른 쪽에서 FIN패킷을 보내어 데이터 전송이 완료되었음을 나타낼 때 발생한다. 소켓의 읽기 측면이 닫힌다. TCP프로토콜에서 FIN패킷을 보낸다는것은 더이상 데이터를 보내지 않겟다는 신호이다. 연결의 끝을 의미한다. 이 이벤트로 연결이 정상적으로 종료되었는지 확인가능하다. 주로 자원을 정리하거나 로그를 남길때 사용한다. - error
에러가 발생할 경우 발생한다. 이 이벤트가 발생한다면 이후에 바로 close이벤트가 호출된다. - close
양쪽의 연결이 모두 끝난경우에 발생한다. 소켓이 완전히 닫힐 경우를 의미하며 소켓이 완전히 종료되었음을 나타내는 이벤트이다. 리소스 해체나 후속 작업을 처리할 때 유용하다.
비교적 덜 사용되는 이벤트들
- connect
소켓 연결이 성공했을때 발생 - drain
쓰기 버퍼가 비워졌을때 발생 / 더 많은 데잍터를 써도 안전함을 의미한다. - lookup
호스트 이름을 해결한후 연결하기 전에 발생 /주소 패밀리와 주소에 대한 정보를 제공 - ready
소켓이 사용 준비가 되었을 때 발생 - timeout
소켓이 비활성 상태로 인해 타임아웃 되었을 때 발생 / 타임아웃이 설정된 경우에만 발생
버퍼(Buffer) 객체
버퍼 객체에 대해 이해하기전 바이트 배열에 대해 알아보자
- 바이트 배열
8비트 단위의 데이터 배열이다. 각 요소는 0부터 255 사이의 정수 값을 가진다(1바이트) - 바이트 배열의 용도
이진 데이터 이미지,동영상,네트워크 패킷 등을 표현할 때 사용된다. 효율적인 메모리 사용과 빠른 데이터 전송이 가능하다.
버퍼 객체 란?
Buffer객체는 node.js에서 이진 데이터를 다루기 위한 특별한 객체이다.
JS의 문자열은 *UTF-16 형식으로 인코딩되어 있어 이진 데이터를 효율적으로 처리하기 어려운데
Buffer객체는 원시적인 이진 데이터를 저장하고 조작하는데 최적화 되어 있다.
지원해주는 메서드 등이 존재함
- 장점
- 고정 길이
buffer객체는 고정된 크기의 바이트 배열이다. 모든 데이터가 1바이트 단위로 처리되므로 데이터 처리에 매우 유용함 - 빠른 접근
buffer객체는 바이트 단위로 데이터를 직접 접근하고 조작할 수 있다. 이는 이진 데이터 처리에서 매우 유용함 - 메모리 효율성
buffer 객체는 필요한 만큼의 메모리만 사용한다. 예를들어 1바이트의 데이터를 처리할 때 1바이트의 메모리만 사용한다. - 호환성
대부분의 네트워크 프로토콜과 파일 포맷이 바이트 단위로 데이터를 처리하므로 buffer 객체를 사용하면 추가적인 변환 과정 없이 쉽게 데이터를 주고받을 수 있다.
- buffer객체의 변환 순서
- 객체안에 값을 ASCII(아스키 코드) 로 변환하여 바이트 배열에 저장한다..(10진수)
- 바이트 배열의 값을 16진수로 변환한다.
const buffer = Buffer.from('Chicken');
console.log(buffer); // <Buffer 43 68 69 63 6b 65 6e>
console.log(buffer[0]); // 67 (C의 ASCII 값)
간단한 데이터 교환
- 보낼 메시지를 Buffer객체의 인자로 바이트 배열을 만든다.
const message = "Chicken";
const buffer = Buffer.from(message);
- write 메서드를 사용해서 버퍼 쓰기
client.write(buffer)
//서버의 콘솔
<Buffer 43 68 69 63 6b 65 6e>
- 서버에서는 클라에서 받은 데이터를 그대로 재전송해준다.
socket.write(data);
//클라에서의 콘솔
<Buffer 43 68 69 63 6b 65 6e>
- UTF16 란?
유니코드 문자를 16비트(2바이트) 단위로 인코딩하는 방식이다.
'Node' 카테고리의 다른 글
객체지향 패턴(Object-Oriented Patterns) (0) | 2024.10.29 |
---|---|
TCP 이해하기 (0) | 2024.10.28 |
Socket.io 기본 기능 (0) | 2024.09.30 |
webSocket 게임 서버 개발 강의 코드 이해하기 (1) | 2024.09.27 |
HTTP의 특징,webSocket의 특징 (2) | 2024.09.26 |