websocket : 양방향 소통을 위한 프로토콜. 즉, 다른 컴퓨터와 소통하기 위한 규약
- HTML5 웹 표준 기술. 그래서 클라이언트 측에서는 따로 모듈 설치할 필요 X
- 매우 빠르게 작동. 통신할 때 아주 적은 데이터 이용
- 이벤트의 단순 송수신만 가능. broadcasting 하려면 클라이언트.send(데이터)
를 for문에 돌려야 함.
- 연결이 끊어져도 연결을 재시도하지 않음. 연결을 복구하려면 추가로 코드 구성해야 함
- string 자료형 하나로 데이터를 주고 받음. 이벤트명도 데이터에 포함해서 받기 때문에 데이터를 parsing하는 작업(JSON.parse
, JSON.stringify
)이 필요함. NestJS에서는 event
로 이벤트명 지정, data
로 데이터명 지정하는 규약이 있음
=> 데이터 전송이 많은 경우(ex. 가상화폐 거래소), 빠르고 비용이 적은 표준 Websocket 사용하는게 유리.
socket.io : 양방향 통신을 위해 웹소켓 기술을 활용하는 라이브러리. Java, C++, Python 등 타 언어 라이브러리도 지원
- 라이브러리(표준기술 X)
- 소켓 연결 실패 시 fallback을 통해 알아서 다른 방식으로 클라이언트와 연결 시도
- Room 개념을 이용해 일부 클라이언트에게만 데이터를 전송하는 broadcasting 가능
- 연결이 끊어지면 주기적으로 연결을 시도함
- to
, of
와 같이 특정 클라이언트를 지정하는 기능이 있음
! socket.io 로 구성된 서버에 소켓 연결을 하기 위해서는 클라이언트 측에서 socket.io-client
라이브러리를 사용해야 함
=> 서버에서 연결된 소켓(user)들을 세밀하게 관리해야하는 서비스인 경우, broadcasting 기능이 있는 socket.io를 사용하는게 유리.
참고 블로그: https://www.peterkimzz.com/websocket-vs-socket-io/
함께 보면 좋을 블로그:
'기타' 카테고리의 다른 글
[Javascript] 비동기 처리, Promise, async/await (0) | 2022.07.13 |
---|---|
SQL과 NoSQL의 차이, 장단점 (0) | 2022.06.23 |
[Sourcetree] Bitbucket 협업 시 충돌 병합(Conflict Merge) 해결 방법 (0) | 2022.06.07 |
Cognito 참고 자료 (0) | 2022.04.26 |
[Sourcetree] github 토큰 인증 로그인 방법 : sourcetree Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. (0) | 2021.08.19 |