>  기사  >  백엔드 개발  >  Python의 웹소켓 프로그래밍

Python의 웹소켓 프로그래밍

PHPz
PHPz원래의
2023-06-17 08:07:155435검색

인터넷의 급속한 발전과 함께 웹소켓 프로토콜은 새로운 통신 프로토콜로도 널리 사용되고 있습니다. 일반적인 프로그래밍 언어인 Python에는 개발자에게 좋은 지원을 제공하는 Tornado 및 WebSocket-Server와 같은 우수한 Websocket 라이브러리가 많이 있습니다.

이 기사에서는 Websocket 프로토콜과 HTTP 프로토콜과의 차이점, Python을 사용하여 Websocket 애플리케이션을 개발하는 단계 및 구현 방법을 소개합니다.

1. Websocket 프로토콜 소개

Websocket 프로토콜은 TCP 프로토콜 위에서 실행되는 전이중 통신 프로토콜입니다. 이 프로토콜은 지속적인 연결을 제공하여 클라이언트와 서버 간의 실시간 양방향 데이터 전송을 가능하게 하며 실시간 통신, 온라인 게임 및 기타 시나리오에 사용할 수 있습니다.

웹소켓 프로토콜의 특징은 다음과 같습니다.

(1) 모든 데이터 전송은 프레임(Frame)을 기반으로 합니다.

(2) Websocket 프로토콜은 핸드셰이크 단계에서 HTTP 프로토콜을 사용합니다.

(3) Websocket 프로토콜은 데이터 프레임과 제어 프레임이라는 두 가지 유형의 프레임을 제공합니다. 데이터 프레임은 메시지를 전송하는 데 사용되고, 제어 프레임은 연결 상태를 유지하는 데 사용됩니다.

(4) Websocket 프로토콜은 연결 안정성을 유지하기 위해 하트비트 메커니즘을 제공합니다.

(5) Websocket 프로토콜은 암호화된 SSL/TLS 및 암호화되지 않은 방법을 통해 통신할 수 있습니다.

2. Websocket 프로토콜과 HTTP 프로토콜의 차이점

Websocket 프로토콜과 HTTP 프로토콜은 모두 애플리케이션 계층 프로토콜이지만 다음과 같은 주요 차이점이 있습니다.

(1) Websocket은 지속적인 연결이고 HTTP는 짧은 연결.

(2) Websocket 프로토콜은 Handshake 단계에서 통신을 위해 HTTP 프로토콜을 사용하지만 Websocket Handshake 단계는 한 번만 수행하면 실시간 데이터 통신이 가능합니다.

(3) Websocket 프로토콜은 데이터 전송에 바이너리 프레임과 텍스트 프레임을 사용하는 반면, HTTP 프로토콜은 텍스트 데이터만 전송할 수 있습니다.

(4) Websocket 프로토콜은 양방향 데이터 전송을 수행할 수 있는 반면, HTTP 프로토콜은 단방향 데이터 전송만 수행할 수 있습니다.

3. Python은 Websocket 애플리케이션을 구현합니다.

Python에는 많은 Websocket 라이브러리가 있으며 그 중 Tornado와 WebSocket-Server가 가장 일반적으로 사용됩니다. 이 기사에서는 WebSocket-Server를 예로 들어 Python을 사용하여 Websocket 애플리케이션을 구현하는 방법을 소개합니다.

  1. WebSocket-Server 라이브러리 설치

WebSocket-Server 라이브러리를 설치하려면 명령줄에 다음 명령을 입력하세요.

pip install websocket-server
  1. Write server code

Python에서 Websocket 서버를 구현하려면 먼저 다음을 수행해야 합니다. WebsocketServer 객체를 생성한 다음 on_open(), on_message(), on_close() 등과 같은 여러 이벤트 메서드를 오버로드하여 데이터 연결, 데이터 수신 및 연결 닫기와 같은 작업을 완료합니다.

구체적인 코드는 다음과 같습니다.

from websocket_server import WebsocketServer

# 客户端连接时触发
def new_client(client, server):
    print("New client connected and was given id %d" % client["id"])
    server.send_message_to_all("Hey all, a new client has joined us")

# 接收到客户端消息时触发
def message_received(client, server, message):
    print("Client(%d) said: %s" % (client["id"], message))
    server.send_message_to_all("Client(%d) said: %s" % (client["id"], message))

# 客户端关闭连接时触发
def client_left(client, server):
    print("Client(%d) disconnected" % client["id"])

# 建立 WebSocketServer 对象,监听 9001 端口
server = WebsocketServer(9001)
server.set_fn_new_client(new_client)
server.set_fn_message_received(message_received)
server.set_fn_client_left(client_left)

# 启动服务器
server.run_forever()
  1. Websocket 서버 실행

WebSocket 서버를 시작하려면 명령줄에 다음 명령을 입력하세요.

python server.py
  1. 클라이언트 코드 작성

Websocket 클라이언트를 구현하려면 Python에서는 WebSocketClient 개체를 설정한 다음 connect(), send(), close() 등과 같은 여러 메서드를 호출하여 연결, 데이터 전송 및 닫기 작업을 완료해야 합니다.

구체적인 코드는 다음과 같습니다.

from websocket import create_connection

# 建立 WebSocket 连接
ws = create_connection("ws://localhost:9001/")

# 发送消息
ws.send("Hello, world!")

# 接收消息
result = ws.recv()
print("Received '%s'" % result)

# 关闭 WebSocket 连接
ws.close()

위는 Python에서 Websocket 프로그래밍의 단계와 구현 방법입니다. 이를 통해 실시간 통신 및 온라인 게임과 같은 응용 프로그램을 구현할 수 있습니다. 물론 WebSocket-Server 라이브러리 외에도 선택할 수 있는 다른 Websocket 라이브러리가 있으며 개발자는 자신의 필요에 따라 이를 선택하고 사용해 볼 수 있습니다.

위 내용은 Python의 웹소켓 프로그래밍의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.