【Python】websockets库的介绍及用法

目录

1、应用场景

2、websockets库-三方库


1、应用场景

Python的websockets库是一个用于处理WebSocket协议的库,WebSocket是一个用于在浏览器和服务器间进行全可信双向通信的网络协议。

其应用场景主要包括:

  1. 实时通信: 如在线聊天应用、协作工具、多玩家游戏等需要实时交互的场景。
  2. 实时数据推送: 比如股票信息、天气信息、新闻更新、设备状态等实时数据的推送。
  3. 物联网(IoT): 用于服务器与设备间的实时通信。
  4. 服务端推送技术: 服务器可以主动向客户端发送信息,客户端无需频繁请求刷新。
  5. 在线教育或在线视频类应用: 老师可以实时看到所有在线学生的反馈。
  6. 实时监控: 例如流量监控、系统性能监控等需要实时反馈数据的场景。

通常来说,只要涉及到需要服务器和客户端进行双向实时交互的应用,都可以使用websockets库来实现。

2、websockets库-三方库

websockets不是Python的标准库,他是一个Python的第三方库,可以通过pip进行安装。

Python中websockets库的常用方法有以下几个:

  • websockets.serve(): 这个函数负责创建并启动一个WebSocket服务器。
import asyncio
import websockets

async def hello(websocket, path):
    name = await websocket.recv()
    print(f"< {name}")
    
    greeting = f"Hello {name}!"
    
    await websocket.send(greeting)
    print(f"> {greeting}")

start_server = websockets.serve(hello, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
  • websocket.recv(): 这个函数是一个协程函数,用于从WebSocket接收消息。
  • websocket.send(): 这个函数是一个协程函数,用于向WebSocket发送消息。
  • websockets.connect(): 这个函数负责创建一个 WebSocket 客户端。
import asyncio
import websockets

async def hello():
    uri = "ws://localhost:8765"
    async with websockets.connect(uri) as websocket:
        name = input("What's your name? ")
        await websocket.send(name)
        print(f"> {name}")

        greeting = await websocket.recv()
        print(f"< {greeting}")

asyncio.get_event_loop().run_until_complete(hello())
  • websocket.close(): 关闭 WebSocket 连接。
  • websockets.exceptions: 提供了WebSocket特定的异常。如:ConnectionClosed、InvalidHandshake、InvalidOrigin等。

请注意,websockets库大多数的函数都是协程(coroutine)函数,需要使用 async/await 关键字。

协程(Coroutine)是一种比线程更加轻量级的存在。线程是操作系统的调度单位,而协程是程序调度的单位。也就是说,虽然两者都满足多任务的需要,但是协程的切换开销更小。

在Python中,协程函数被定义为一个包含有async def语句的函数:

async def coroutine_function():
    # Your code here
    pass

协程函数不能直接执行,而需要通过event loop(事件循环)来调用。你可以像这样使用它:

loop = asyncio.get_event_loop()  # 获取事件循环
loop.run_until_complete(coroutine_function())  # 调用协程函数

在协程函数内部,你可以使用await来挂起自身的执行以等待另一个I/O操作完成。

协程函数、async/await,以及asyncio库等都是Python3.5以后版本才引入的新特性,用以更好地处理异步I/O操作,特别是在需要高并发的web服务器和爬虫等应用中有着广泛的应用。

你可能感兴趣的:(python,python,笔记)