웹소켓 서버 예제

By | August 2, 2019

또한 서버는 여기에서 확장/하위 프로토콜 요청을 결정할 수 있습니다. 자세한 내용은 기타 를 참조하십시오. Sec-WebSocket-Accept 헤더는 서버가 클라이언트가 보낸 Sec-WebSocket-Key에서 서버를 파생시켜야 한다는 점에서 중요합니다. 이를 얻으려면 클라이언트의 Sec-WebSocket 키와 문자열 “258EAFA5-E914-47DA-95CA-C5AB0DC85B11″을 함께 연결하여 결과의 SHA-1 해시를 가져 와서 해당 해시의 base64 인코딩을 반환합니다. 서브 프로토콜 협상은 WebSocket 연결이 설정되면 클라이언트와 서버가 서로를 이해할 수 있다는 전달 보장이 없을 때 가장 유용합니다. 참고 : 당신이 당신의 인생에서 Node.js를 건드리지 않은 경우, 당신은 당신의 컴퓨터에서 실행되는 간단한 Node.js 서버를 얻기 위해 몇 가지 Node.js 자습서를 확인해야합니다. 또한 NPM을 사용하여 패키지를 설치하는 방법을 알아야합니다. 응답에서 서버에서 발급한 상호 헤더 예: 헤더가 이해되지 않거나 잘못된 값이 있는 경우 서버는 400(“잘못된 요청”)}의 응답을 보내고 소켓을 즉시 닫아야 합니다. 평소와 같이 HTTP 응답 본문에서 핸드셰이크가 실패한 이유를 줄 수도 있지만 메시지가 표시되지 않을 수 있습니다(브라우저에서는 핸드셰이크가 표시되지 않음). 서버가 해당 버전의 WebSockets를 이해하지 못하면 이해한 버전이 포함된 Sec-WebSocket 버전 헤더를 다시 보내야 합니다. 위의 예에서는 WebSocket 프로토콜의 버전 13을 나타냅니다.

유효한 인증서(예: 파이썬 설치가 신뢰하는 CA에서 서명)를 사용하여 보안 WebSocket 서버에 연결하는 클라이언트는 컨텍스트를 빌드하는 대신 ssl=Trueto to connect()를 간단히 전달할 수 있습니다. 위에서 설명한 것 이외에 WebSocket 핸드셰이크의 첫 번째 부분은 이것이 실제로 적절한 WebSocket 업그레이드 핸드셰이크임을 증명하는 것입니다. 프로세스가 클라이언트에 의해 또는 중간에 있는 프록시 서버에 의해 일종의 중간 속임수에 의해 납치되지 않는다는 것을 증명하는 것이 중요합니다. 기억 – 내 구현도 원격으로 완료되지 않습니다. 특히 효율적이지 않습니다. 이미 많은 기존 WebSocket 서버 구현이 있습니다. 서버는 두 개 이상의 Sec-Websocket-프로토콜 헤더를 보낼 수 없습니다. 서버가 하위 프로토콜을 사용하지 않으려면 Sec-WebSocket-프로토콜 헤더를 보내서는 안 됩니다. 빈 헤더를 보내는 것은 올바르지 않습니다.

클라이언트가 원하는 하위 프로토콜을 얻지 못하면 연결을 닫을 수 있습니다. 팁: 요청 uri(/채팅)에는 사양에 정의된 의미가 없습니다. 많은 사람들이 한 서버가 여러 WebSocket 응용 프로그램을 처리할 수 있도록 영리하게 사용합니다. 예를 들어 example.com/chat 다중 사용자 채팅 앱을 호출할 수 있지만 동일한 서버의 /game은 멀티플레이어 게임을 호출할 수 있습니다. 따라서 서버에 현재 연결 수와 보낸 모든 메시지 수를 요청할 수 있기를 원한다고 가정해 보겠습니다. 이를 위해 하나의 URL(/상태)만 알고 있는 간단한 HTTP 서버를 만들고 이 두 숫자로 JSON을 응답으로 전송해야 합니다.

Category: Uncategorized