我有一个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}$
目前没有回答
相关问题 更多 >
编程相关推荐