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

使用Flask实现POST请求连接同服务器WebSocket可行吗?

问题分析与解决方案

你的代码出现307临时重定向的核心原因是Flask默认开发服务器是单线程模式:当POST请求进来后,服务器被该请求占用,无法同时响应自身发起的WebSocket连接请求,导致请求阻塞触发重定向。这种在同一服务内通过POST触发WebSocket调用的方式是完全可行的,只需要调整服务器的并发处理能力。

修复步骤

1. 启用多线程模式

修改启动代码,给run()方法添加threaded=True参数,让服务器可以同时处理多个请求:

from flask import Flask
from flask_sock import Sock
import websocket

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

@sock.route('/echo')
def echo(ws):
    while True:
        data = ws.receive()
        print(data)
        ws.send(data)

@app.route("/", methods=['POST'])
def hello_world():
    ws = websocket.WebSocket()
    ws.connect(f'ws://localhost:5000/echo')
    ws.send('hello')
    resp = ws.recv()
    ws.close()
    return resp

# 启用多线程模式
sock.app.run(threaded=True)

2. 测试验证

启动服务后,向http://localhost:5000/发送POST请求,此时服务器可以同时处理POST请求和WebSocket连接,你会收到返回值hello。

关于ngrok的补充说明

不需要使用两个独立隧道,单隧道即可同时处理HTTP和WebSocket流量。只要本地服务修复了多线程问题,将POST请求和WebSocket连接都指向ngrok分配的地址即可(比如POST请求到https://xxx.ngrok.io/,WebSocket连接到wss://xxx.ngrok.io/echo)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:27:43