I recently discovered the existence of the HTML5 server-sent events standard. Although it lacks the bidirectional communications of a websocket, SSE is perfect for the publish-subscribe networking pattern. This pattern just so happens to fit in conveniently with writing software to remotely monitor hardware that many people might want to check in on at the same time.
app = Flask(__name__) def event(): while True: yield 'data: ' + json.dumps(random.rand(1000).tolist()) + '\n\n' gevent.sleep(0.2) @app.route('/') def index(): return render_template('index.html') @app.route('/stream/', methods=['GET', 'POST']) def stream(): return Response(event(), mimetype="text/event-stream")
This can be run either using gevent's WSGI server or gunicorn using gevent workers.
Update 2016-04-21: There is now a very nice Flask extension called Flask-SSE which handles all of this for you. It additionally supports the concept of channels in order to fine tune what notifications a given client receives.more ...