>  기사  >  백엔드 개발  >  Python의 Tornado에서 WebSocket의 개념 및 적용 소개

Python의 Tornado에서 WebSocket의 개념 및 적용 소개

不言
不言앞으로
2018-10-20 15:31:352303검색
이 글은 Python의 Tornado에서 WebSocket의 개념과 적용을 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

Tornado의 비동기적 특성은 서버의 높은 동시성 처리에 매우 적합합니다. 클라이언트와 서버 간의 영구 연결 애플리케이션 프레임워크는 높은 동시성의 전형적인 애플리케이션입니다. WebSocket은 HTTP 클라이언트와 서버 사이에 지속적인 연결을 설정하는 HTML5 표준 기술입니다. 이 장에서는 Tornado 프레임워크에서 WebSocket 기술을 적용하는 방법을 설명합니다.
WebSocket 프로토콜은 HTML5에서 정의한 새로운 표준 프로토콜(RFC6455)로, 브라우저와 서버 간의 전이중 통신을 구현합니다.

1. WebSocket의 애플리케이션 시나리오

기존 HTTP 및 HTML 기술은 클라이언트를 사용하여 서버에 적극적으로 요청을 보내고 응답을 얻습니다. 그러나 인스턴트 메시징에 대한 수요가 증가함에 따라 이 통신 모델은 애플리케이션의 요구 사항을 충족하지 못하는 경우가 있습니다.

WebSocket은 일반 소켓 통신과 유사하며 원래 HTTP 요청 및 응답의 일대일 통신 모델을 깨고 서버가 클라이언트 요청을 수동적으로만 수락할 수 있는 애플리케이션 시나리오도 깨뜨립니다. 아마도 독자들은 Ajax, Long poll과 같은 전통적인 HTTP 기반의 동적 클라이언트 기술에 대해 들어봤을 것입니다. 그러나 이러한 기술은 모두 폴링 기술을 사용하므로 네트워크 대역폭과 컴퓨팅 리소스를 많이 소모합니다.

WebSocket은 이러한 시나리오에 대처하기 위해 공식화된 HTML5 표준입니다. 일반적인 소켓 통신과 비교하여 WebSocket은 애플리케이션 계층에서 기본적인 상호 작용 프로세스를 정의하여 Tornado 및 JavaScript 클라이언트와 같은 서버 프레임워크가 표준 WebSocket을 구축할 수 있도록 합니다. 모듈.

WebSocket의 특징은 다음과 같이 요약됩니다.

  • WebSocket은 서버가 적극적으로 푸시하는 시나리오에 적합합니다.

  • Ajax 및 Long poll과 같은 기술에 비해 WebSocket 통신 모델은 더 효율적입니다.

  • WebSocket은 여전히 ​​HTTP를 통한 인터넷 통신을 완료합니다.

  • HTML5의 표준 프로토콜이므로 기업 방화벽에 의해 차단되지 않습니다.

2. WebSocket의 통신 원리

WebSocket의 통신 원리는 클라이언트와 클라이언트 사이에 있습니다. 서버 클라이언트에 푸시해야 하는 메시지가 서버에 있을 때 즉시 통신이 가능하도록 TCP 영구 연결을 설정합니다.

WebSocket은 HTTP가 아니지만 HTML 콘텐츠가 인터넷에서 HTTP로 캡슐화되어 전송되기 때문에 WebSocket은 여전히 ​​HTTP와 협력해야 합니다. IETF는 RFC6455의 HTTP 링크를 기반으로 WebSocket 채널을 설정하기 위한 표준 프로세스를 정의합니다.

클라이언트는 다음 HTTP 요청을 전송하여 WebSocket 긴 링크 채널을 설정해야 한다고 서버에 알립니다.

GET /stock_info/?encoding=text HTTP/1.1
Host:echo.websocket.org
Origin:http://websocket.org
Cookie:__token=ubcxx13
Connection:Upgrade
Sec-WebSocket-Key:uRovscZjNol/umbTt5uKmw==
Upgrade:websocket
Sec-WebSocket-Version:13

Readers는 이것이 여전히 HTTP 요청 패킷임을 확인할 수 있습니다. 내용을 이해하고 매우 친숙합니다.

  • HTTP 요청 방법: GET

  • 요청 주소: /stock_info

  • HTTP 버전 번호: 1.1

  • 서버 호스트 도메인 이름: echo.websocket.org

  • #🎜🎜 #
  • 쿠키 정보: __token=ubcxx13

그러나 HTTP 헤더에는 4개의 고유 필드가 있습니다.

Connection:Upgrade
Sec-WebSocket-Key:uRovscZjNol/umbTt5uKmw==
Upgrade:websocket
Sec-WebSocket-Version:13
#🎜🎜 # 이것이 WebSocket 링크 설정의 핵심입니다. 클라이언트가 WebSocket 링크를 설정하려고 한다는 사실을 웹 서버에 알려줍니다. 클라이언트가 사용하는 WebSocket 버전은 13이고 키는 uRovscZjNol/umbTt5uKmw==입니다.

요청을 받은 후 서버는 WebSocket 링크 설정에 동의하면 다음과 유사한 응답을 반환합니다.

HTTP/1.1 101 WebSocket Protocol Handshake
Date:Fri,10 Feb 2012 17:38:18 GMT
Connection:Upgrade
Server:Kaazing Gateway
Upgrade:WebSocket
Access-Control-Allow-Origin:http://websocket.org
Access-Contril-Allow-Credentials:true
Sec-WebSocket-Accept:rLHCKw/SKs09GAH/ZSFhBATDKrU=
Access-Control-Allow-Headers:content-type

이것은 여전히 ​​표준 HTTP 응답입니다. WebSocket과 관련되어 있습니다. 헤더 정보는 다음과 같습니다.

Connection:Upgrade
Upgrade:WebSocket
Sec-WebSocket-Accept:rLHCKw/SKs09GAH/ZSFhBATDKrU=

데이터의 처음 두 부분은 클라이언트에게 서버가 이 연결을 WebSocket 링크로 변환했음을 알려줍니다. Sec-WebSocket-Accept는 클라이언트가 보낸 Sec-WebSocket-Key를 암호화한 후 생성되는 데이터로, 서버가 정상적으로 작동하는지 클라이언트가 확인할 수 있도록 해준다.

이 시점에서 클라이언트와 서버 사이에 TCP 영구 링크가 설정되었으며, 양측은 언제든지 서로에게 메시지를 보낼 수 있습니다.

위 내용은 Python의 Tornado에서 WebSocket의 개념 및 적용 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제