我在uwsgi后面有一个python应用程序,它以ascync模式运行,以支持服务器发送事件(SSE)。应用程序在mysql数据库上执行各种任务。在SSE连接上,我希望能够在对数据库进行更改时实时发送事件。你知道吗
理想情况下,我想得到通知时,数据库的变化。在寻找这个问题之后,我还没有找到任何好的解决方案,其中不包括在触发器中启动外部进程。因为我不想在每次更改上都引入很大的开销,所以我目前的方法是只报告应用程序所做的更改,而不是在mysql shell或类似的应用程序中所做的任何其他更改。你知道吗
SSE循环如下所示:
def application(env, start_response):
start_response("200 OK", [('Content-Type', "text/event-stream")])
while True:
# wait for event somehow. using uwsgi.wait_fd_read()?
# parse event from other uwsgi process
# fetch new or updated data from database
# generate SSE-event
ev = ServerSentEvent()
yield ev.encode()
应用程序的其他部分修改数据库,类似于:
def changeDatabase():
db.performQuery("update foo set .... ")
# Send some event to other uwsgi processes that foo table has been updated
我该怎么做?信号?uwsgi信号?共享内存?写入文件?还有什么我不知道的机制吗?你有什么建议?你知道吗
就我个人而言,我倾向于使用redis pub/sub来做这类事情。它是快速,可靠和易于使用。基本上,你的SSE应用程序开始在一个发布/子频道上等待,而你的django应用程序发布到它。uWSGI信号也很简单,但它们不携带某种形式的有效载荷,因此可能会受到很大限制。你知道吗
相关问题 更多 >
编程相关推荐