2011-05-11 10 views
20

원시 TCP 연결에 추가되는 웹 소켓은 무엇입니까? WebSocket을 사용해야하는 이유는 무엇입니까?웹 소켓 대 플래시의 원시 TCP 소켓

내가 좋아하는 단점과 장점을 듣고 싶습니다 :

  • 좋은 : WebSocket을 오버 헤드
많이 추가 WebSocket을은
  • 나쁜 등 autoreconnection, 세션 ID, 같은 몇 가지 유용한 것들을 추가

    플래시 클라이언트 만 있고 자바 스크립트 클라이언트를 지원할 필요가 없습니다.

  • +0

    이 주제에 대한 좋은 정보 : http://lucumr.pocoo.org/2012/9/24/websockets-101/ – tybro0103

    답변

    17

    브라우저의 웹 응용 프로그램에서 원시 소켓을 수행 할 수 없습니다. CORS 보안 (웹 소켓 핸드 셰이크의 이유 중 일부)을 얻으려는 정책 파일 요청에 응답해야하기 때문에 Flash의 "원시"소켓 연결도 실제로 원시가 아닙니다.

    초기 WebSocket 핸드 셰이크 후 WebSocket 메시지에는 프레임 당 2 바이트의 프레임 오버 헤드가 있습니다 (Hixie- *에는 '\ x00 ... \ xff'가 있고 HyBi-07에는 2 바이트 헤더가 있음) 오버 헤드가 거의 없습니다. 일반 소켓에 비해

    WebSocket 핸드 셰이크는 HTTP 호환 업그레이드 요청이므로 WebSocket 지원을 기존 웹 서버에 쉽게 통합하고 기존 웹 포트 (80/443)를 사용하면 WebSocket 연결을 기존 방화벽 규칙에보다 쉽게 ​​통합 할 수 있습니다 .

    HTTP 호환 핸드 셰이크는 또한 기존 HTTP 인증 메커니즘이 WebSockets과 투명하게 작동 할 수 있음을 의미합니다. 또한 WebSocket은 거의 수정하지 않고 기존 웹 프록시에 의해 프록시 될 수 있습니다.

    WebSockets 프로토콜 개정판 (HyBi-07)의 다음 버전에서는 페이로드 데이터의 클라이언트 - 서버 XOR 마스킹을 사용하여 오작동하는 웹 중개자에 대한 보호 기능을 제공합니다.

    WebSocket을 기반으로 구축 된 여러 자바 스크립트 프레임 워크가 Socket.IO 인 경우에도 자동 재 연결, 세션 ID 등과 같은 항목은 웹 소켓에 정의되어 있지 않습니다. Flash 응용 프로그램에서 WebSocket을 수행하는 경우 자체 세션 관리를 수행하거나 기존 세션 관리 라이브러리를 Flash 소켓 대신 WebSocket을 사용하도록 변환해야합니다 (예 : 쉽게 변환 할 수 있음).

    업데이트 : 링크의

    커플 여기에 착륙 당신이나 다른 사람에게 유용 할 수 있습니다 :

    • AS3WebSocket : Flash 응용 프로그램에 대한 WebSocket을 클라이언트 라이브러리.
    • web-socket-js : 웹 소켓 폴백/polyfill이 Javascript 응용 프로그램 용 Flash로 구현되어 있습니다 (Flash가 있지만 기본 웹 소켓이없는 브라우저에 WebSocket 지원을 추가하기 위해).
    +0

    오버 헤드와 관련하여 최소 2 바이트이지만 일반적으로 더 많습니다. 클라이언트에서 서버로 마스크를위한 추가 4 바이트입니다. 데이터가 126 바이트보다 길면 uint 길이에 대해 또 다른 4 바이트를 추가해야합니다. 따라서 대개 전송할 데이터의 오버 헤드가 약 10 바이트입니다. 그러나 더 중요한 것은,이 헤더를 처리하고 각 메시지에 대해 서버 쪽에서 역 마스킹을 수행하므로 더 많은 CPU를 사용하여 데이터를 처리합니다.데이터에서 바로 직렬로 이진으로 직렬화를 작성하는 경우 JSON 예제와 같이 utf8 메시지를 사용하는 것이 훨씬 더 좋습니다. 플래시 사용 원시. – moka

    +1

    Maksims, HyBi 작업 그룹은 클라이언트 -> 서버 트래픽을 마스킹하기 위해 메커니즘을 선택하는 데 매우 의도적이었습니다. 마스크가 프레임에 포함되어 있으므로 기억할 상태가 없기 때문에 실행중인 4 바이트 XOR은 로트 또는 아키텍처 전반에서 가장 빠른 (효율적인) 스트리밍 작업에 관한 것입니다. 또한 주목해야 할 점은 서버 -> 클라이언트 트래픽은 항상 마스크되지 않으며 대용량 데이터는 일반적으로 서버 -> 클라이언트라는 점입니다. 또한 126 -> 65535 바이트 프레임에는 2 바이트가 추가로 4 바이트가 추가됩니다. 65535 이상은 8 개의 추가 바이트입니다. 이 헤더 오버 헤드는 측정 가능한 실제 차이를 만들지 않습니다. – kanaka

    +0

    글쎄요 : "모든 새로운 기술에는 새로운 문제가 있습니다 .WebSocket의 경우 대부분의 회사 네트워크에서 HTTP 연결을 중재하는 프록시 서버와 호환됩니다 .WebSocket 프로토콜은 HTTP 업그레이드 시스템을 사용합니다 (정상적으로 HTTPS/SSL에 사용)을 사용하여 HTTP 연결을 WebSocket 연결로 "업그레이드"합니다. 일부 프록시 서버는이를 원하지 않고 연결을 끊습니다. 따라서 특정 클라이언트가 WebSocket 프로토콜을 사용하더라도 설정이 불가능할 수도 있습니다 연결. " - http://www.html5rocks.com/en/tutorials/websockets/basics/ – Triynko