TCP 소켓과 웹 소켓의 차이점, 다시 한 번
이 질문에는 이미 답변이 있습니다.
TCP 소켓과 웹 소켓의 차이점을 최대한 이해하려고 노력하면서 이미 다음 질문에서 유용한 정보를 많이 발견했습니다.
등등...
조사에서 나는 wikipedia 에 대한이 문장을 살펴 보았습니다 .
Websocket은 바이트 스트림 대신 메시지 스트림을 사용할 수 있다는 점에서 TCP와 다릅니다.
그것이 무엇을 의미하는지 완전히 확신하지 못합니다. 당신의 해석은 무엇입니까?
일반적인 TCP 소켓으로 버퍼에서 바이트를 보내면 send 함수는 전송 된 버퍼의 바이트 수를 반환합니다. 비 차단 소켓이거나 비 차단 전송 인 경우 전송 된 바이트 수가 버퍼 크기보다 작을 수 있습니다. 그것이 블로킹 소켓이거나 블로킹 전송이라면, 반환 된 숫자는 버퍼의 크기와 일치하지만 호출은 차단 될 수 있습니다. WebSocket을 사용하면 send 메소드로 전달되는 데이터는 항상 전체 "메시지"로 전송되거나 전혀 전송되지 않습니다. 또한 브라우저 WebSocket 구현은 송신 호출을 차단하지 않습니다.
그러나 수신 측면에는 더 중요한 차이점이 있습니다. 수신자가 TCP 소켓에서 recv (또는 읽기)를 수행 할 때 리턴 된 바이트 수가 송신자 측의 단일 송신 (또는 쓰기)에 해당한다고 보장 할 수 없습니다. 같을 수도 있고 적을 수도 있고 더 많을 수도 있습니다 (이 경우 여러 전송 / 쓰기의 바이트가 수신 됨). WebSocket을 사용하면 메시지 수신이 이벤트 중심 (일반적으로 메시지 처리기 루틴 등록)이며 이벤트의 데이터는 항상 상대방이 보낸 전체 메시지입니다.
TCP 소켓을 사용하여 메시지 기반 통신을 수행 할 수 있지만 원본 메시지를 조각에서 다시 어셈블 할 수 있도록 메시지에 프레임 / 메시지 경계 데이터를 추가하는 추가 레이어 / 캡슐화가 필요합니다. 실제로 WebSocket은 일반 TCP 소켓을 기반으로하며 각 프레임의 크기를 포함하고 메시지의 일부 프레임을 나타내는 프레임 헤더를 사용합니다. WebSocket API는 메시지 당 메시지 이벤트 핸들러를 호출하기 전에 데이터의 TCP 청크를 프레임으로 재 조립합니다.
WebSocket은 기본적으로 TCP 를 전송 계층으로 사용 하는 메시지 지향적 응용 프로그램 프로토콜 (ISO / OSI 네트워크 스택 참조) 입니다.
WebSocket 프로토콜의 기본 개념은 클라이언트와 서버간에 설정된 TCP 연결을 재사용하는 것입니다. HTTP 핸드 셰이크 후 클라이언트와 서버는 WebSocket 엔벨로프를 교환하여 WebSocket 프로토콜 말하기를 시작합니다. HTTP 핸드 쉐이킹은 일부 서비스를 제공하는 클라이언트와 서버 간의 장벽 (예 : 방화벽)을 극복하는 데 사용됩니다 (보통 포트 80은 어느 곳에서나 누구나 액세스 할 수 있음) 클라이언트와 서버는 동일한 TCP 연결을 사용하여 언제든지 발표 HTTP를 전환 할 수 있습니다.
배후에서 WebSocket은 일관된 봉투 / 메시지로 TCP 프레임을 재 구축합니다. 전이중 채널은 서버 에서 비동기 방식으로 클라이언트를 향해 업데이트 를 푸시 하는 데 사용됩니다 . 채널이 열려 있고 클라이언트는 미래 / 콜백 / 프로 미스를 호출하여 비동기 WebSocket 수신 메시지를 관리 할 수 있습니다.
간단히 말해서 WebSocket은 TCP (프레임 당 신뢰할 수있는 전송 계층)를 기반으로하는 높은 수준의 프로토콜 (HTTP 자체와 같은)로 JS 클라이언트 (이전에는 Comet 및 Long-polling 기술)를 사용하여 효과적인 실시간 응용 프로그램을 구축 할 수 있습니다. WebSocket을 구현하기 전에 서버에서 업데이트를 가져 오는 데 사용 되었습니다 ( 스택 오버플로 게시물 : 웹 소켓 과 턴 기반 게임 서버의 긴 폴링의 차이점 참조 ).
'Programing' 카테고리의 다른 글
VBA에서 현재 워크 시트의 경로를 얻는 방법은 무엇입니까? (0) | 2020.06.26 |
---|---|
ASP.NET : 요청 간 Session.SessionID 변경 (0) | 2020.06.26 |
datagridview에서 행 색상을 변경하는 방법은 무엇입니까? (0) | 2020.06.26 |
csv.Error : 반복자는 바이트가 아닌 문자열을 반환해야합니다 (0) | 2020.06.26 |
vi 편집기에서 한 단어를 왼쪽으로 이동하는 방법 (0) | 2020.06.26 |