WebSockets을 사용하여 연결 샘플(HTML)

[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]

Windows.Networking.Sockets 네임스페이스의 기능을 통해 대기 시간이 낮고 안전한 실시간 양방향 네트워크 통신을 위해 WebSocket을 사용하여 데이터를 보내고 받습니다.

WebSocket이란?

WebSocket 프로토콜은 웹을 통해 클라이언트와 서버 간의 신속하고 보안이 유지된 양방향 통신을 위한 메커니즘을 정의합니다. 데이터가 전이중 단일 소켓 연결을 통해 즉시 전송되므로 두 끝점에서 실시간으로 메시지를 보내고 받을 수 있습니다. WebSocket은 실시간 게임, 인스턴트 소셜 네트워크 알림, 주식 또는 날씨 정보의 최신 디스플레이, 안전하고 빠른 데이터 전송이 필요한 기타 앱을 포함하는 Windows 런타임 앱에서 사용하는 데 적합합니다. 또한 WebSocket 프로토콜은 기본적으로 웹 브라우저에서 사용되는 것과 동일한 포트(HTTP 및 HTTPS)를 사용하므로 WebSocket은 프록시와 방화벽을 통과합니다.

WebSocket 연결을 설정하기 위해 클라이언트와 서버 간에 특정 HTTP 기반의 핸드셰이크가 교환됩니다. 교환이 성공하면 이전에 설정된 TCP 연결을 사용하여 응용 프로그램 계층 프로토콜이 HTTP에서 WebSocket으로 "업그레이드"됩니다. 업그레이드된 후에 HTTP는 완전히 무시되고 WebSocket 연결이 닫힐 때까지 두 끝점에서 WebSocket 프로토콜을 사용하여 데이터를 보내거나 받을 수 있습니다.

중요  서버가 WebSocket 프로토콜을 사용하지 않는 한 클라이언트는 WebSocket을 사용하여 데이터를 전송할 수 없습니다. 서버가 WebSocket을 지원하지 않으면 다른 데이터 전송 방법을 사용해야 합니다.

 

Windows.Networking.Sockets 네임스페이스는 Windows 런타임에서 클라이언트 WebSocket에 대한 지원을 제공합니다. 클라이언트 및 서버 WebSocket이 둘 다 데스크톱 앱용 Windows 8.1에서 지원됩니다.

Windows.Networking.Sockets 네임스페이스는 Windows 런타임 앱에서 클라이언트가 사용할 두 가지 유형의 WebSocket 개체 즉, MessageWebSocketStreamWebSocket을 정의합니다. 아래 표에서는 두 가지 유형의 WebSocket에 대해 설명합니다.

MessageWebSocket StreamWebSocket
메시지가 지나치게 크지 않은 일반적인 시나리오에 적합합니다. 사진이나 동영상 등 큰 파일이 전송되는 시나리오에 적합합니다.
전체 WebSocket 메시지가 수신되었다는 알림을 사용합니다. 각 읽기 작업으로 메시지의 섹션을 읽을 수 있습니다.
UTF-8 메시지와 바이너리 메시지를 모두 지원합니다. 바이너리 메시지만 지원합니다.
어느 정도 UDP 소켓(DatagramSocket)과 비슷합니다. 어느 정도 TCP 소켓(StreamSocket)과 비슷합니다.

 

네트워크 격리에 WebSocket 사용

개발자는 Windows 런타임의 네트워크 격리 기능을 사용하여 Windows 런타임 앱의 네트워크 액세스를 제어하고 제한할 수 있습니다. 일부 앱은 네트워크에 대한 액세스 권한이 필요하지 않을 수 있습니다. 그러나 네트워크에 대한 액세스 권한이 필요한 앱의 경우 Windows 런타임에서 적절한 접근 권한 값을 선택하여 사용할 수 있는 다양한 수준의 네트워크 액세스 권한을 제공합니다.

개발자는 네트워크 격리를 통해 각 앱에 대해 필요한 네트워크 액세스 범위를 정의할 수 있습니다. 적절한 범위가 정의되지 않은 앱은 지정된 유형의 네트워크와 특정 유형의 네트워크 요청(클라이언트가 시작한 아웃바운드 요청 또는 원치 않는 인바운드 요청과 클라이언트가 시작한 아웃바운드 요청 모두)에 액세스할 수 없습니다. 네트워크 격리를 설정하고 적용할 수 있게 되면 앱이 손상되었을 경우 명시적으로 액세스가 허용된 네트워크에만 액세스하도록 할 수 있습니다. 이 경우 다른 응용 프로그램 및 Windows에 영향을 미치는 범위가 현저히 줄어듭니다.

네트워크 격리는 네트워크에 액세스하려고 하는 Windows.Networking.Sockets 네임스페이스의 모든 클래스 요소에 영향을 미칩니다. Windows에서는 적극적으로 네트워크 격리가 적용됩니다. 적절한 네트워크 접근 권한 값을 사용하지 않는 경우 결과적으로 네트워크에 액세스하게 되는 Windows.Networking.Sockets 네임스페이스의 MessageWebSocket 또는 StreamWebSocket 클래스 메서드 호출이 네트워크 격리로 인해 실패할 수 있습니다.

앱의 네트워크 접근 권한 값은 앱을 빌드할 때 앱 매니페스트에 구성됩니다. 네트워크 접근 권한 값은 일반적으로 앱을 개발할 때 Microsoft Visual Studio 2013 Update 2를 사용하여 추가합니다. 텍스트 편집기를 사용하여 앱 매니페스트 파일에서 수동으로 네트워크 접근 권한 값을 설정할 수도 있습니다.

네트워크 격리에 대한 자세한 내용은 네트워크 접근 권한 값을 설정하는 방법을 참조하세요.

대상 개발자 그룹

다음 항목의 예에서는 JavaScript를 사용하고 WebSocket 샘플을 기반으로 합니다. JavaScript를 사용하여 Windows 런타임 앱을 만드는 방법에 대한 일반적인 내용은 JavaScript를 사용하는 Windows 런타임 앱용 로드맵.

이 섹션의 내용

항목 설명
MessageWebSocket을 사용하여 연결하는 방법

MessageWebSocket을 사용하여 웹 서버로 데이터를 보내고 받기 위한 요구 사항 및 특정 단계를 자세히 설명합니다.

StreamWebSocket을 사용하여 연결하는 방법

StreamWebSocket을 사용하여 웹 서버로 데이터를 보내고 받기 위한 요구 사항 및 특정 단계를 자세히 설명합니다.

고급 WebSocket 컨트롤을 사용하는 방법

고급 소켓 컨트롤을 사용하여 WebSocket 개체에서 옵션을 설정하는 방법을 설명합니다.

TLS/SSL을 통해 WebSocket 연결의 보안을 유지하는 방법

TLS(전송 계층 보안)/SSL(Secure Sockets Layer)을 통해 WebSocket 연결의 보안을 유지하는 방법을 설명합니다.

 

유사 기능 및 관련 기능에 대해 알아보기

섹션 설명
네트워크 격리 접근 권한 값을 구성하는 방법

네트워크 격리 기능에 대해 소개하고 네트워크 격리 접근 권한 값을 구성하여 Windows 스토어 앱에 대한 네트워크 액세스를 완전히 제어하는 방법을 설명합니다.

소켓을 사용하여 네트워크에 연결

소켓을 사용하여 네트워크 리소스로 데이터를 보내고 받기 위한 요구 사항 및 특정 단계를 자세히 설명합니다.

네트워킹 지원 추가

앱에 네트워킹 지원을 추가하는 방법에 대해 설명합니다.

네트워크 연결 문제 해결 및 디버그

연결 문제 해결에 도움이 되는 제안과 정보를 제공합니다.

 

관련 항목

기타

JavaScript로 작성한 Windows 런타임 앱용 로드맵

참조

MessageWebSocket

StreamWebSocket

Windows.Networking.Sockets

샘플

WebSocket 샘플