You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在本地Flask服务器的Python程序中开启两个WebSocket连接?

在Python中建立两个WebSocket连接的方法

不需要同时导入多个WebSocket库,选一个适配你场景的库就能搞定。下面分客户端和服务端两种场景说明:

场景1:作为客户端同时建立两个连接

推荐用websockets库(异步实现,天生适合并发处理多个连接)。

  1. 先安装库:
pip install websockets
  1. 示例代码:
import asyncio
import websockets

async def single_ws_connection(url):
    async with websockets.connect(url) as ws:
        # 这里可以添加消息收发逻辑
        await ws.send("Hi from client!")
        reply = await ws.recv()
        print(f"来自 {url} 的回复: {reply}")
        # 如需保持连接,可在此处添加循环监听消息

async def main():
    # 替换成你要连接的两个WebSocket服务地址
    ws_addr1 = "wss://echo.websocket.org"
    ws_addr2 = "wss://your-second-ws-server.com"
    
    # 并发执行两个连接任务
    await asyncio.gather(
        single_ws_connection(ws_addr1),
        single_ws_connection(ws_addr2)
    )

if __name__ == "__main__":
    asyncio.run(main())

这段代码用asyncio.gather同时启动两个连接协程,每个连接独立处理自己的消息交互,全程只用到websockets一个库。

场景2:作为服务端同时处理两个客户端连接

如果是基于Flask开发服务端,用flask-sock最省心;如果偏好纯异步服务,继续用websockets也可以。

用flask-sock实现

  1. 安装库:
pip install flask-sock
  1. 示例代码:
from flask import Flask
from flask_sock import Sock

app = Flask(__name__)
sock = Sock(app)

# 每个客户端连接进来时,都会触发这个函数
@sock.route('/ws')
def handle_ws_connection(ws):
    while True:
        msg = ws.receive()
        if not msg:
            break
        ws.send(f"已收到你的消息: {msg}")

if __name__ == "__main__":
    # 开发环境直接run,生产环境建议用gunicorn等WSGI服务器
    app.run(debug=True)

当有两个客户端连接ws://localhost:5000/ws时,服务端会为每个连接创建独立的处理实例,自动支持并发,不需要额外配置。

用websockets实现异步服务

import asyncio
import websockets

async def handle_client(ws):
    # 循环监听当前客户端的消息
    async for msg in ws:
        await ws.send(f"回声: {msg}")

async def main():
    # 启动服务,监听本地8765端口
    async with websockets.serve(handle_client, "localhost", 8765):
        await asyncio.Future()  # 保持服务持续运行

if __name__ == "__main__":
    asyncio.run(main())

这个服务可以同时接收N个客户端连接,每个连接的消息都由handle_client独立处理。

库的选择建议

  • 做客户端:优先选websockets,异步特性处理多连接更高效;
  • 做服务端:如果已经在用Flask,选flask-sock无缝集成;否则用websockets做纯异步服务更轻量。

内容的提问来源于stack exchange,提问作者Carter Hugill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:46:08