Gửi và Nhận Tin nhắn qua WebSocket trong Python

Giao tiếp qua WebSocket cho phép bạn gửi và nhận tin nhắn thời gian thực giữa máy chủ và máy khách. Dưới đây là hướng dẫn chi tiết về cách thực hiện việc này trong Python sử dụng thư viện websockets.

Bước 1: Cài đặt Thư viện WebSocket

Trước hết, bạn cần cài đặt thư viện websockets bằng cách chạy lệnh sau trong terminal:

pip install websockets

Bước 2: Gửi và Nhận Tin Nhắn trong Máy chủ

Dưới đây là ví dụ về cách gửi và nhận tin nhắn trong máy chủ WebSocket:

import asyncio
import websockets

# Hàm xử lý kết nối WebSocket
async def handle_connection(websocket, path):
    async for message in websocket:
        await websocket.send(f"Server received: {message}")

# Khởi tạo máy chủ WebSocket
start_server = websockets.serve(handle_connection, "localhost", 8765)

# Chạy máy chủ trong vòng lặp sự kiện
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

Trong đoạn mã trên:

  • async def handle_connection(websocket, path):: Đây là hàm xử lý kết nối WebSocket. Khi máy khách gửi tin nhắn, hàm này sẽ lắng nghe và gửi lại thông điệp đã nhận.

  • async for message in websocket:: Vòng lặp này lắng nghe các tin nhắn từ máy khách thông qua kết nối WebSocket.

  • await websocket.send(f"Server received: {message}"): Hàm này gửi phản hồi từ máy chủ đến máy khách thông qua kết nối WebSocket.

Bước 3: Gửi và Nhận Tin Nhắn từ Máy khách

Dưới đây là ví dụ về cách máy khách gửi và nhận tin nhắn từ máy chủ WebSocket:

import asyncio
import websockets

async def send_and_receive():
    async with websockets.connect("ws://localhost:8765") as websocket:
        await websocket.send("Hello, WebSocket!")
        response = await websocket.recv()
        print("Received:", response)

asyncio.get_event_loop().run_until_complete(send_and_receive())

Trong đoạn mã trên:

  • async with websockets.connect("ws://localhost:8765") as websocket:: Đây là cách máy khách kết nối với máy chủ WebSocket. Máy khách sẽ thiết lập kết nối tới địa chỉ localhost và cổng 8765.

  • await websocket.send("Hello, WebSocket!"): Máy khách gửi tin nhắn "Hello, WebSocket!" tới máy chủ.

  • response = await websocket.recv(): Máy khách chờ và nhận phản hồi từ máy chủ thông qua kết nối WebSocket.

Kết Luận

Bằng cách tuân thủ các bước và hiểu rõ từng phần trong ví dụ, bạn đã hoàn thành quá trình gửi và nhận tin nhắn qua WebSocket trong Python. Điều này mở ra khả năng tạo ra các ứng dụng thời gian thực và truyền tải dữ liệu liên tục giữa máy chủ và máy khách.