sanic之websocket路由

本文介绍了在Sanic框架中如何创建WebSocket路由,包括在app内和蓝图中设置,并提供了一个简单的实时通信demo。同时,讨论了WebSocket的权限验证方法,通过添加token装饰器来防止非法连接。最后,推荐了两个在线WebSocket测试工具。

在某些时候,需要建立websocket路由,来建立长链接,来实时传输数据,就比如一些聊天应用,就有实时音视频,需要实时传出状态

在sanic框架中支持两种websocket路由方式,有一种是再app中建立,另一种实在蓝图中,但是没有提供类的路由写法,都是通过函数的写法

1.app

from sanic import Sanic
app = Sanic(__name__)

@app.websocket('/feed')
async def feed(request, ws):
    try:
        while True:
            data = 'hello!'
            print('Sending: ' + data)
            await ws.send(data)
            data = await ws.recv()
            print('Received: ' + data)
    except Exception as e:
        print(e)

#app.add_websocket_route(feed, "/feed")
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8009) 

2.blueprint

接口:ws://ip号:8001/api/student/v2/feed

StudentVideoCallBP = Blueprint(__name__, url_prefix='/api/student/v2/')

@StudentVideoCallBP.websocket('/feed')
async def feed(ws):
    try:
        while True:
            data = 'hello!'
            print('Sending: ' + data)
            await ws.send(data)
            data = await ws.recv()
            print('Received: ' + data)
    except Exception as e:
        print(e)


# StudentVideoCallBP.add_websocket_route(feed, "/feed")
Vie
### 关于 Sanic 框架的架构设计与组件说明 Sanic 是一种基于 Python 的异步 Web 框架,专为高并发场景下的高性能应用而设计。它的核心设计理念围绕着非阻塞 I/O 和协程机制展开,充分利用了 Python 3.7 及以上版本引入的 `async`/`await` 特性。 #### 1. **核心架构** Sanic 的架构主要由以下几个部分构成: - **事件循环 (Event Loop)** Sanic 使用 Python 自带的 `asyncio` 库来驱动其内部的事件循环。这种设计使得框架能够高效处理大量并发请求而不受传统线程模型的限制[^4]。 - **路由系统 (Routing System)** 路由系统负责匹配 HTTP 请求路径到对应的处理器函数。Sanic 提供了一种灵活的方式来定义 URL 路径及其关联的视图逻辑[^5]。 - **中间件支持 (Middleware Support)** 中间件允许开发者在请求到达目标视图前或响应返回客户端后执行自定义代码。这有助于实现诸如身份验证、日志记录等功能[^6]。 #### 2. **主要组件** 以下是 Sanic 框架的主要组成部分以及它们的功能描述: - **Application Instance** 这是整个应用程序的核心对象,用于注册蓝图、设置全局配置参数并启动服务器实例[^7]。 - **Blueprints** Blueprints 提供了一种模块化的方法来组织大型项目中的不同功能区域。通过将特定功能封装成独立单元,可以更轻松地管理和扩展复杂的应用程序结构[^8]。 - **Request Handling** 当接收到一个新的 HTTP 请求时,Sanic 将创建一个 Request 对象以存储有关该次交互的所有必要信息(如 headers, body 等)。随后此对象会被传递给适当的手动编写的 handler 函数进行进一步处理[^9]。 - **Response Generation** 处理完毕之后,handler 需要返回一个 Response 实例作为最终结果反馈给用户端设备。此类包含了多种方法帮助构建标准格式化的回复数据流[^10]。 - **Static File Serving** 如果需要提供静态资源下载服务,则可以直接利用内置工具完成这项工作而无需额外安装第三方库文件[^11]。 - **WebSocket Integration** 支持 WebSocket 协议意味着除了普通的 RESTful API 接口之外还可以建立持续双向通信连接通道以便实时推送消息通知等内容更新操作[^12]。 ```python from sanic import Sanic from sanic.response import json app = Sanic("MyApp") @app.route("/") async def test(request): return json({"hello": "world"}) if __name__ == "__main__": app.run(host="0.0.0.0", port=8000) ``` 上述示例展示了如何快速搭建起一个简单的 Sanic 应用程序,并监听根目录下 GET 方法请求的同时回应 JSON 数据包形式的结果集。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值