0

同時に 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"])

私には悪いアプローチのように見えます...

4

0 に答える 0