2013-03-01 1 views

답변

4

TCP와 WebSocket은 동일한 프로토콜이나 프레이밍이 아니므로 맹목적으로 연결하는 것은 효과가 없습니다. 음 ... 기술적으로 websocket은 ssl (선택 사항)에 계층화되어있는 http의 업그레이드이며, 차례로 tcp에 계층화되어 있습니다.

TCP는 바이트 스트림으로 생각할 수 있지만 WebSocket은 설정된 프레임입니다.

웹 소켓 프레임은 다음 중 하나 일 수있다 :

  • TEXT - 다른 하나 UTF8 메시지를
  • BINARY를 구성하는 하나 개 이상의 프레임으로 구성 - 바이트 배열 메세지를 구성하는 하나 개 이상의 프레임으로 구성
  • 연속 - TEXT 및 BINARY에서 두 개 이상의 프레임을 함께 사용합니다.
  • PING -
  • PONG 분명 - 분명
  • CLOSE은 - 프로토콜의 가까운/해제를 요청합니다.

요약하면 TCP가 websocket에 연결되도록하려면 websocket protocol framing을 구현해야합니다. 그리고 그 지점에 도달하려면 기본 HTTP UPGRADE을 구현해야합니다.

+0

을 생성, 아니 그 가능하지? – jaffa

+0

많은 추가 작업이 가능하지만 가능합니다. 말하자면 "상자에서"작동하지 않습니다. –

+0

명확히하기 위해 스트림 대 프레임이 아니며 스트림 대 메시지입니다. TCP 프로토콜은 응용 프로그램에서 원래 메시지로 다시 어셈블해야하는 바이트 스트림을 전달합니다. WebSocket 프로토콜은 전송 된 각 메시지가 하나의 전체 메시지로 수신되도록 메시지를 전달합니다. "프레이밍"이라는 용어는 TCP와 WebSocket (실제로 모든 유선 프로토콜)에 적용되는 개념입니다. – kanaka

5

물론입니다! 그게 websockify의 목적입니다.

물론 WebSocket 클라이언트 응용 프로그램은 TCP 서버의 프로토콜을 구현할 수 있어야합니다. 예를 들어, noVNC은 RFB 프로토콜을 구현하는 브라우저 VNC 클라이언트이며 websockify를 사용하여 일반 TCP 기반 VNC 서버에 연결할 수 있습니다.

면책 조항 : 나는 짧은 그래서 모두 websockifynoVNC

+0

브라우저 내부에서 멋지게 작동합니까? – jaffa

+0

@jaffa, 네, 그게 주요한 유스 케이스입니다. – kanaka

+0

그러나 이것은 프록시와 비슷합니까? http://artemyankov.com/tcp-client-for-browsers/와 마찬가지로? – HackNone

관련 문제