서버, 클라이언트 : 매우 광범위한 Autobahn 테스트 제품군을 전달합니다. 레지스트리는 하위 프로토콜 이름을 해석에 매핑하기 위한 단일 소스입니다. 그러나 유일한 엄격한 요구 사항은 클라이언트와 서버가 상호 선택된 하위 프로토콜이 실제로 의미하는 바에 동의한다는 것입니다. IANA 레지스트리에 나타나는지 여부는 중요하지 않습니다. 이미 WebSockets 또는 Long 폴링을 사용 중인 경우 이동하여 서버 전송 이벤트로 변환하지 마십시오. 서버에서 클라이언트로 데이터를 푸시할 때 모든 솔루션은 기본적으로 동일합니다. 앞에서 제공한 서버 코드와 마찬가지로 서버는 목록에서 json을 선택하고 초기 핸드셰이크 응답에 포함합니다. 서버가 지정된 하위 프로토콜 중 하나를 선택하지 않으면 브라우저에서 구현한 WebSocket API가 자동으로 연결에 실패합니다. 이것은 WebSocket 프로토콜과 직접적인 관련이 없지만 여기에서 언급 할 가치가 있습니다 : 서버는 클라이언트의 소켓을 추적하여 이미 핸드셰이크를 완료 한 클라이언트와 다시 핸드 셰이킹을 하지 않도록해야합니다. 동일한 클라이언트 IP 주소는 여러 번 연결을 시도할 수 있지만 서비스 거부 공격으로부터 자신을 저장하기 위해 너무 많은 연결을 시도하는 경우 서버에서 이를 거부할 수 있습니다. WebSockets를 사용하면 서버와 클라이언트가 연결이 설정된 후 둘 중 하나에 의한 명시적 요청 없이 언제든지 서로 메시지를 보낼 수 있습니다. 이는 일반적으로 도전 응답 원칙과 연관된 HTTP와 는 대조적으로, 데이터를 명시적으로 요청해야 하는 경우입니다.

보다 기술적인 용어로 WebSockets를 사용하면 클라이언트와 서버 간에 전이중 연결을 사용할 수 있습니다. 인스턴스 개체의 send() 메서드는 서버로 데이터를 보내는 데 사용됩니다. 서버 구현을 계속하기 전에 먼저 방정식의 클라이언트 측면을 살펴보겠습니다. 결국, 클라이언트없이 서버 코드를 테스트하는 것은 일종의 어려운 일을 시작합니다. WebSockets의 가장 일반적인 예는 채팅 또는 푸시 알림입니다. 이러한 응용 프로그램에 사용할 수 있지만 이러한 응용 프로그램에서는 서버가 클라이언트에 데이터를 푸시해야 하기 때문에 문제에 대한 과잉 솔루션을 제공해야 하며, 그 외의 경우는 반이중 연결만 필요합니다. 핸드셰이크 응답이 클라이언트로 전송되면 클라이언트와 서버 간에 메시지를 보내고 받을 수 있습니다. RFC의 섹션 5를 간략하게 살펴보고 관련 내용을 파악합니다. OnMessage 이벤트는 클라이언트가 서버에 데이터를 보낼 때 발생합니다. 이 이벤트 처리기 내에서 들어오는 메시지를 클라이언트로 전송하거나 일부 메시지만 선택할 수 있습니다.

이제 서버는 클라이언트가 활성 TCP 소켓을 통해 현재 사용 중인 프로토콜을 업그레이드하려고 한다는 것을 알고 되었으므로 서버는 해당 업그레이드 헤더를 찾는 것을 알고 있습니다. 이렇게 하면 클라이언트가 연결의 남은 수명 동안 사용할 전송 프로토콜을 알 수 있습니다.

Categories: Sin categoría