我想创建一个只能由一个客户端同时编辑的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"])
对我来说这看起来很糟糕......