python - 处理服务器端事件断开连接

标签 python bottle server-sent-events

我有一个简单的 python bottle 应用程序,它向 javascript 监听器发出 SSE 事件。

在客户端通过浏览器刷新或页面返回等“离开”之前,这没有问题。

由于来自应用程序的事件被传送,然后从内部队列中删除,当服务器试图将它们发送到不再存在的客户端时,一两个事件会丢失。

我不希望事件丢失,但我目前看不到以合理方式解决此问题的方法。

我打算改用网络套接字并使用事件-确认模型来解决问题,除非我可以用 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"

可以在此处找到指向我的问题解决方案的链接。它使用弱引用来“检测”客户端何时离开,以及每个 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/

关于python - 处理服务器端事件断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32092047/

相关文章:

python - 使用 Pandas 检查列值是否位于某一特定列中

python - PyGame:文本未出现

python - Bottle Cork 创建了一个用户,但没有将其保存到数据库中

python - Bottle 服务器未完全重置,保留旧的、不正确的功能

php - 使用外部 API 访问时,Python Bottle API 无 Json 响应

javascript - Grails 服务器发送事件

python - Flask:如果路径是目录或文件,则处理捕获所有不同的 url

python - 升级 Pip 错误信息

javascript - 服务器使用 node.js (express) 发送事件/事件源

Java-EE SSE 聊天