sanic: websocket

WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

Sanic支持websocket版本7和8。

服务端:

from sanic import Sanic
from sanic.websocket import WebSocketProtocol

app = Sanic(__name__)


@app.websocket('/ws')
async def feed(request, ws):
    while True:
        receive_data = await ws.recv()
        print('服务端接收客户端: ' + receive_data)

        send_data = 'hello!'
        print('服务端发给客户端: ' + send_data)
        await ws.send(send_data)


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

客户端:

import asyncio
import websockets


async def hello():
    uri = "ws://127.0.0.1:8000/ws"
    async with websockets.connect(uri) as websocket:
        # 发送给服务端的信息
        message = input('input: ')
        print(f"发送给服务端的信息:{message}")
        await websocket.send(message)

        # 接收服务端的信息
        bytes_data = await websocket.recv()

        # bytes 转 string
        str_data = str(bytes_data)
        print("接收来自服务端的信息:{}".format(str_data))


if __name__ == '__main__':
    r = hello()
    asyncio.run(r)

启动ws服务端

图片

启动ws客户端,发送和接收效果:

图片

ws服务端,接收和发送效果:

图片
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容