python的WebSocket收发消息

版权声明:转载请注明作者(独孤尚良dugushangliang)出处:https://blog.csdn.net/dugushangliang/article/details/100971395

 

参阅:https://websockets.readthedocs.io/en/stable/

先启动服务端:

import asyncio
import websockets
port=8765
host='localhost'
print(f'ws://{host}:{port}')

async def deal(websocket,path):
        message=await websocket.recv()
        print(message)

start_server = websockets.serve(deal, host, port)
#下面这行代码执行后创建一个WebSocket对象
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

启动服务端后,将一直等待客户端的连接。

再执行客户端:

import asyncio
import websockets
async def hello():
    uri = "ws://localhost:8765"
    async with websockets.connect(uri) as websocket:
            message=input('cin: ')
            print(f"< {message}")
            await websocket.send(message)

#下面代码一执行,客户端将和服务端建立连接。客户端将等待输入内容,输入后客户端即发送此内容到服务端
asyncio.get_event_loop().run_until_complete(hello())

上文的这个代码,决定了:客户端连接后只能发送消息并不能接收消息。客户端发送消息给服务端后,连接即停止。除非再次执行客户端的最后一行代码,重新建立连接。

那么,怎么实现,客户端能一直给服务端发送消息呢?

上loop

async def hello():
    uri = "ws://localhost:8765"
    async with websockets.connect(uri) as websocket:
        while True:
            message=input('cin: ')
            if message=='esc':
                break
            print(f"< {message}")
            await websocket.send(message)

但有个问题:客户端发送一条消息后,虽然可以继续输入,但是服务端并不接收内容了。这是因为代码决定了服务端只接收一次。

那么怎么写代码,可以让服务端一直接收消息?

async def deal(websocket,path):
    while True:
        message=await websocket.recv()
        print(message)

还有一种操作: 

async def deal(websocket,path):
    async for message in websocket:
        message=await websocket.recv()
        print(message)

 

 

独孤尚良dugushangliang——著

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值