同時に 1 つのクライアントのみが編集できる webapp を作成したいと考えています。私はフラスコとフラスコソケットを使用しています。承認されたクライアントが去った後 (socketio の切断イベント)、次は編集できるようになります。現在、websockets への複数の呼び出しがあり、http は 1 つの websocket だけではありません。私は単純な html フォームも持っているので、着信要求もブロックする必要があります。
socketio イベントでリクエスト オブジェクトから IP を取得できました。
connected = None
@socketio.on('disconnect', namespace='/notifications')
def disconnect():
global connected
connected = None
logger.info('Client disconnected')
@socketio.on('connect', namespace='/notifications')
def notifications():
global connected
if not request.headers.getlist("X-Forwarded-For"):
ip = request.remote_addr
else:
ip = request.headers.getlist("X-Forwarded-For")[0]
if connected is None:
connected = ip, request.environ["REMOTE_PORT"]
logger.info("Client connected. %s:%s", connected[0],connected[1])
# do stuff
else:
logger.info("Blocked %s:%s", ip, request.environ["REMOTE_PORT"])
私には悪いアプローチのように見えます...