websocket server 예제

앞에서 제공한 서버 코드와 마찬가지로 서버는 목록에서 json을 선택하고 초기 핸드셰이크 응답에 포함합니다. 서버가 지정된 하위 프로토콜 중 하나를 선택하지 않으면 브라우저에서 구현한 WebSocket API가 자동으로 연결에 실패합니다. 필자의 경험에 비추어 볼 때, 대부분의 사람들은 일반 오래된 HTTP가 서버 전송 이벤트(일명 서버 전송 이벤트)를 통해 서버에서 클라이언트로 데이터를 푸시하는 메커니즘을 제공한다는 것을 알지 못합니다. 이벤트 소스). 나는 롭 호크스가 서버가 실행되는지 관찰하기 위해 모니트 (monit)를 사용했다고 언급 한 모질라의 롭 호크스 (Rob Hawkes)와 HTML5 게임을 이야기하고 결국 파산 한 경우 다시 시작한다고 언급했습니다. 요청의 첫 번째 토큰은 HTTP 메서드입니다. 이렇게 하면 클라이언트가 참조된 URL과 관련하여 시도하는 작업 유형을 서버에 알려줍니다. GET 메서드는 클라이언트가 단순히 서버가 지정된 URL에서 참조하는 리소스의 복사본을 제공하도록 요청할 때 사용됩니다. 헤더가 이해되지 않거나 잘못된 값이 있는 경우 서버는 400(“잘못된 요청”)}을 보내고 소켓을 즉시 닫아야 합니다. 평소와 같이 HTTP 응답 본문에서 핸드셰이크가 실패한 이유를 줄 수도 있지만 메시지가 표시되지 않을 수 있습니다(브라우저에서는 핸드셰이크가 표시되지 않음).

서버가 해당 버전의 WebSockets를 이해하지 못하면 이해한 버전이 포함된 Sec-WebSocket 버전 헤더를 다시 보내야 합니다. 위의 예에서는 WebSocket 프로토콜의 버전 13을 나타냅니다. 이렇게 하면 서버는 이러한 프로토콜 중 하나를 선택하고 응답 헤더에 포함시키거나 핸드셰이크에 실패하여 연결을 종료해야 합니다. 예를 들어 json-ld와 json-스키마가 서버에서 모두 선택된 경우를 예로 들 수 있습니다. 둘 다 JSON 표준에 기반한 데이터 형식입니다. 데이터를 처리할 때 예기치 않은 오류가 발생하도록 다른 것으로 해석될 수 있는 많은 에지 케이스가 있습니다. 웹 스크립트의 예를 살펴보겠습니다. (결과를 보려면 여기를 클릭하십시오) 서버가 NGINX와 같은 프록시 뒤에서 실행되는 경우 사실상 표준은 X-Forwarded-For 헤더를 사용하는 것입니다. 핸드셰이크에서 하위 프로토콜을 시연하기 위해 클라이언트와 서버가 통신할 때 JSON 형식의 데이터를 사용하는 데 동의하도록 합시다. 이것이 서버 부분의 전부입니다.

나는 그것이 적절한 코멘트를 추가하지만 난 이해하기 매우 간단 생각합니다. 확장은 서버에서 기본적으로 비활성화되고 클라이언트에서 기본적으로 활성화됩니다. 성능 및 메모리 소비 측면에서 상당한 오버헤드를 추가하므로 실제로 필요한 경우에만 사용하도록 설정하는 것이 좋습니다. 웹 소켓은 TCP 스택 위에도 빌드됩니다. 즉, 클라이언트와 서버가 소켓 연결을 열어 놓고 지속적인 통신을 위해 용도를 변경하는 데 동의하는 방법만 있으면 됩니다. WebSocket 서버의 원시 구현은 실제로 프로세스의 첫 번째 단계에 불과합니다.