Non-Message Queue / Simple Long-Polling in Python (and Flask)

后端 未结 2 803
故里飘歌
故里飘歌 2021-01-30 07:21

I am looking for a simple (i.e., not one that requires me to setup a separate server to handle a messaging queue) way to do long-polling for a small web-interface that runs calc

2条回答
  •  轻奢々
    轻奢々 (楼主)
    2021-01-30 07:50

    I've built several apps like this using just Flask and jQuery. Based on that experience, I'd say your plan is good.

    1. Do not use the filesystem. You will run into JavaScript security issues/protections. In the unlikely event you find reasonable workarounds, you still wouldn't have anything portable or scalable. Instead, use a small local web serving framework, like Flask.

    2. Do not pickle. Use JSON. It's the language of web apps and REST interfaces. jQuery and those nice jQuery-based plugins for drawing charts, graphs and such will expect JSON. It's easy to use, human-readable, and for small-scale apps, there's no reason to go any place else.

    3. Long-polling is fine for what you want to accomplish. Pure HTTP-based apps have some limitations. And WebSockets and similar socket-ish layers like Socket.IO "are the future." But finding good, simple examples of the server-side implementation has, in my experience, been difficult. I've looked hard. There are plenty of examples that want you to set up Node.js, REDIS, and other pieces of middleware. But why should we have to set up two or three separate middleware servers? It's ludicrous. So long-polling on a simple, pure-Python web framework like Flask is the way to go IMO.

    The code is a little more than a snippet, so rather than including it here, I've put a simplified example into a Mercurial repository on bitbucket that you can freely review, copy, or clone. There are three parts:

    • serve.py a Python/Flask based server
    • templates/index.html 98% HTML, 2% template file the Flask-based server will render as HTML
    • static/lpoll.js a jQuery-based client

提交回复
热议问题