0

我想制作一个只能由一个客户端同时编辑的 webapp。我使用烧瓶和烧瓶socketio。授权客户端离开后(socketio 中的断开连接事件),下一个应该能够编辑内容。现在我对 websockets 有多次调用,而 http 不仅仅是一个 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