- Flask-SSE: Flask-SSEは、Server-Sent Events(SSE)をサポートするFlask拡張です。SSEは、サーバーからクライアントにリアルタイムなイベントデータを非同期にプッシュするためのメカニズムです。Flask-SSEを使用すると、簡単にサーバープッシュを実現できます。
まず、Flask-SSEをインストールします:
pip install flask-sse
次に、以下のようにFlask-SSEを使用してサーバープッシュを実装できます:
from flask import Flask
from flask_sse import sse
app = Flask(__name__)
app.config["REDIS_URL"] = "redis://localhost" # Redisの設定
app.register_blueprint(sse, url_prefix='/stream')
@app.route('/')
def index():
return 'Hello World'
@app.route('/push')
def push():
with app.app_context():
sse.publish({"message": "Hello from server!"}, type='greeting')
return 'Message sent'
if __name__ == '__main__':
app.run(debug=True)
上記の例では、/push
エンドポイントにアクセスすると、サーバーからクライアントにメッセージがプッシュされます。クライアントは/stream
エンドポイントに接続してイベントを受信します。
- Flask-SocketIO: Flask-SocketIOは、WebSocketを使用してリアルタイムな双方向通信を実現するためのFlask拡張です。WebSocketは、サーバーとクライアント間で持続的な接続を確立し、双方向のデータのやり取りを可能にします。
まず、Flask-SocketIOをインストールします:
pip install flask-socketio
次に、以下のようにFlask-SocketIOを使用してサーバープッシュを実装できます:
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
socketio = SocketIO(app)
@app.route('/')
def index():
return render_template('index.html')
@socketio.on('message')
def handle_message(message):
emit('response', {'message': 'Hello from server!'})
if __name__ == '__main__':
socketio.run(app, debug=True)
上記の例では、クライアントから送信されたmessage
イベントに対して、サーバーからresponse
イベントを返します。クライアントはresponse
イベントを受信してメッセージを処理します。
これらは、Flaskフレームワークでサーバープッシュを実装するためのいくつかの方法です。選択肢は他にもありますが、上記の例は一般的な手法です。詳細な実装やさらなるカスタマイズについては、それぞれの拡張のドキュメントを参照してください。