在webbook之后向EventSource发送响应(Flask+uWSGI+nginx)

2024-04-19 06:57:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Flask应用程序和路由(webhook)从外部电话应用程序(incomming call=POST request)接收POST请求(webhook)。此路线设置线程.Event.set()并且基于此事件,另一个路由(eventsource)将事件流发送到由另一个路由(eventstream)创建的网页上打开的eventsource连接。在

telfa_called = Event()
telfa_called.clear()
call = ""

@telfa.route('/webhook', methods=['GET', 'POST'])
def webhook():
    global call
    print('THE CALL IS HERE')
    x = request.data
    y = ET.fromstring(x.decode())
    caller_number = y.find('caller_number').text
    telfa_called.set() #  setting threading.Event for another route
    return Response(status=200)

@telfa.route('/eventstream', methods = ['GET','POST'])
@login_required
def eventstream():
    jsid = str(uuid.uuid4())
    return render_template('telfa/stream.html', jsid=jsid)

def eventsource_gen():
    while 1:
        if telfa_called.wait(10):
            telfa_called.clear()
            print('JE TO TADY')
            yield "data: {}\n\n".format(json.dumps(call))

@telfa.route('/eventsource', methods=['GET', 'POST'])
def eventsource():
    return Response(eventsource_gen(), mimetype='text/event-stream')`

在纯Python应用程序中进行测试时,一切都很好。当我把它移到生产服务器时,问题就开始了,在那里我将uWSGI与nginx一起使用。(这个Python应用程序的其他部分可以正常工作。)

当eventSource连接被打开并且需要处理进入webhook时,整个flask服务器都会死机(对于所有其他用户也是如此),页面停止加载,我找不到错误所在。 我只知道,收到了来自外部应用程序的POST请求,但是没有对EventSource做出响应。 我怀疑这与进程有关——JavaScript的EventSource连接是一个进程,webhook路由是另一个进程——它们不通信。大概吧,我想这应该有一个非常琐碎的解决方案,但我在过去的三天三夜里并没有找到它。有什么提示吗?提前谢谢。在

完整地说,这个我的uwsgi配置文件:

^{pr2}$

Tags: event应用程序路由getreturndefwebhookcall