Python Web框架Sanic WebSocket 使用

发表时间:2020-02-18

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。Sanic 提供了非常简洁的 websockets 抽象,让我们开发基于 WebSocket 的web应用非常容易。

Sanic WebSocket 使用

WebSocket 实例

下面是一个简单的建立 WebSocket 的例子:

from sanic import Sanic
from sanic.response import json
from sanic.websocket import WebSocketProtocol

app = Sanic()

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

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8888, protocol=WebSocketProtocol)

上面这个 app 建立一个 WebSocket 的服务。也可以用 app.add_websocket_route 方法替换装饰器:

async def feed(request, ws):
    pass

app.add_websocket_route(feed, '/feed')

WebSocket 路由的处理函数需要两个参数,第一个是 request 对象,第二个是 WebSocket 协议对象,这个协议对象有两个方法 send recv 用来发送和接收数据。

WebSocket 的配置

通过 app.config 来配置 WebSocket,比如:

app.config.WEBSOCKET_MAX_SIZE = 2 ** 20
app.config.WEBSOCKET_MAX_QUEUE = 32
app.config.WEBSOCKET_READ_LIMIT = 2 ** 16
app.config.WEBSOCKET_WRITE_LIMIT = 2 ** 16

阅读 Sanic 配置 详细了解Sanic的配置细节。

复杂的例子

通常我们的web应用既有普通的 get post ,也有 websocket ,比如下面这个例子:

from sanic import Sanic
from sanic.response import file

app = Sanic(__name__)


@app.route('/')
async def index(request):
    return await file('websocket.html')


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


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=8888, debug=True)

这样一个 app 实例同时支持包括WebSocket在内的多种路由。

文章来源互联网,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890

微配音

Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号-4
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free