weixin_45840746 2023-03-13 13:22 采纳率: 35.6%
浏览 118
已结题

python:使用websocket连接多个客户端

我在本地起了一个python服务 使用websocket用于收发消息,但仅限一个客户端,当我启两个前端时就不行,请问我该如何修改


global newValue, oldValue
newValue = ''
oldValue = ''


# 读串口
async def readLoop():
    global newValue
    print('开始读串口')
    port = "COM3"  # 修改为自己的串口
    bps = 9600
    bytesize = 8
    ser = serial.Serial(port, int(bps), int(bytesize),
                        timeout=1, parity=serial.PARITY_NONE, stopbits=1)
    while True:
        buffer = await asyncio.to_thread(ser.readline)  # 异步读取串口数据
        buffer = buffer.decode().strip()
        print(buffer)
        if buffer == '':
            continue
        if buffer == 'a':
            newValue = 'a'
        elif buffer == 'b':
            newValue = 'b'

# WebSocket 服务器


async def eho(websocket, path):
    global newValue, oldValue
    while True:
        if newValue != oldValue:
            await websocket.send(newValue)
            oldValue = newValue
        else:
            await asyncio.sleep(random.random() * 1)

# 主函数


def main():
    t1 = Thread(target=lambda: asyncio.run(readLoop()))  # 在新线程中异步执行readLoop函数
    t1.start()
    start_server = websockets.serve(eho, "127.0.0.1", 5678)
    print('Websocket 服务器已启动')
    try:
        asyncio.get_event_loop().run_until_complete(start_server)
        asyncio.get_event_loop().run_forever()
    except KeyboardInterrupt:
        print('程序已结束')
        t1.join()  # 关闭线程


if __name__ == '__main__':
    main()
  • 写回答

2条回答 默认 最新

  • threenewbee 2023-03-13 15:31
    关注

    可以使用一个线程池,对每一个请求分别进行处理。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月7日
  • 创建了问题 3月13日

悬赏问题

  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价