Spa*_*set 5 python bottle server-sent-events
我有一个简单的 python Bottle 应用程序,它将 SSE 事件发送到 JavaScript 侦听器。
在客户端通过浏览器刷新或页面返回等“消失”之前,这不会出现任何问题。
由于应用程序中的事件先被传送,然后从内部队列中删除,所以当服务器尝试将它们发送到不再存在的客户端时,一两个事件就会丢失。
我不希望事件丢失,但我目前找不到一种方法以合理的方式解决此问题。
我计划改用 Web 套接字并使用事件确认模型来解决问题,除非我可以使用 SSE 来防止事件以这种方式丢失。
在我看来,SEE 可能不是为我考虑的特定用例而设计的。
这是我正在使用的代码:
@route('/stream/events')
def event_stream():
response.content_type = 'text/event-stream'
response.cache_control = 'no-cache'
# Set client-side auto-reconnect timeout, ms.
yield 'retry: 1000\n\n'
while True:
event = event_queue.get()
logging.debug("Received event from hal: %s", event)
yield "data: " + json.dumps(event) + "\n\n"
Run Code Online (Sandbox Code Playgroud)
可以在此处找到我的问题解决方案的链接。它使用弱引用来“检测”客户端何时离开,以及每个 SEE 连接的单独队列:http://blog.jason.spashett.com/python-bottle-server-side-events-one-way-to -handle-client-disconnects.html
您需要将事件保留在服务器上,以便在重新连接或页面刷新时可以检索它们。
我在一篇博客文章中讨论了这个主题。
http://bayn.es/real-time-web-apps-with-server-sent-events-pt-2/
| 归档时间: |
|
| 查看次数: |
4067 次 |
| 最近记录: |