python学习之websocket客户端和服务端

Part1前言

本文用ptyhon实现了一个最简单的websocket客户端和服务端。

python学习之websocket客户端和服务端_第1张图片

Part2客户端

这里采用内置的websockt库来实现。

import websocket
import time


def on_open(ws):
    print("Connection opened")
    ws.send("Hello, server!")


def on_message(ws, message):
    print("Received message:", message)


def on_close(ws):
    print("Connection closed")


# 创建 WebSocket 客户端对象,并指定服务器地址
ws = websocket.WebSocketApp("ws://127.0.0.1:9090",
                            on_open=on_open,
                            on_message=on_message,
                            on_close=on_close)

ws.run_forever()
time.sleep(100)

整个实现非常简单,通过三个回调函数来得到websocket的状态:on_open、on_message和on_close。创建websocket,只需要一行代码即可实现,输入websocket的url地址。
ws.run_forever() 会堵塞当前线程,所以最好重新开一个线程来做处理,不过调试环境没有关系。

Part3服务端

服务端相对复杂一点。

import asyncio
import websockets
import threading
import time


async def handle_websocket_connection(websocket, path):
    # 处理新的 WebSocket 连接
    print("New WebSocket client connected")

    try:
        # 循环接收客户端消息并处理
        async for message in websocket:
            print(f"Received message from client: {message}")
            await websocket.send(f'{message}')
    except websockets.exceptions.ConnectionClosedError as e:
        print(f"Connection closed unexpectedly: {e}")
    finally:
        pass
        # 处理完毕,关闭 WebSocket 连接
    print("WebSocket connection closed")


def WebsocketServerRun():
    asyncio.set_event_loop(asyncio.new_event_loop())
    # 启动 WebSocket 服务端并等待连接
    start_server = websockets.serve(
        handle_websocket_connection, "localhost", 9090)

    asyncio.get_event_loop().run_until_complete(start_server)
    asyncio.get_event_loop().run_forever()


thread = threading.Thread(target=WebsocketServerRun)
thread.start()

time.sleep(100)

这里开启一个线程来实现websocket的监听,为了防止把主线程堵塞。
1、通过websockets.serve来创建一个websocket的服务端
2、通过asyncio.set_event_loop来设置全局的事件循环
3、时间处理在handle_websocket_connection中进行,基本上包含了数据的读取、连接的建立、连接的关闭,都一条龙可以处理完。

Part4总结

本文实现了一个最简单的基于python的websocket的客户端和服务端。

你可能感兴趣的:(python,学习,websocket,开发语言,网络协议)