Flask 检查烧瓶中的用户是否在线

Flask 检查烧瓶中的用户是否在线,flask,user-management,flask-login,Flask,User Management,Flask Login,我正在构建一个实时流媒体应用程序。如果用户在线,则可以呼叫其他用户。我可以在用户登录时注册日志。然而,我正在寻找一种方法来检查用户是否退出应用程序。欢迎任何建议。1)您可以实施心跳系统,在线用户在该系统中相互发送消息,以确保他们还活着 2) 如果退出意味着用户选择了一个指定的“退出”按钮,那么您可以向其他用户发送一个响应,说您已经退出 我相信还有很多方法可以做到这一点,但这是我在分布式系统课程中学到的两种方法。你可以实现一个心跳系统,在线用户在其中互相发送消息以确保他们还活着 2) 如果退出意味

我正在构建一个实时流媒体应用程序。如果用户在线,则可以呼叫其他用户。我可以在用户登录时注册日志。然而,我正在寻找一种方法来检查用户是否退出应用程序。欢迎任何建议。

1)您可以实施心跳系统,在线用户在该系统中相互发送消息,以确保他们还活着

2) 如果退出意味着用户选择了一个指定的“退出”按钮,那么您可以向其他用户发送一个响应,说您已经退出

我相信还有很多方法可以做到这一点,但这是我在分布式系统课程中学到的两种方法。你可以实现一个心跳系统,在线用户在其中互相发送消息以确保他们还活着

2) 如果退出意味着用户选择了一个指定的“退出”按钮,那么您可以向其他用户发送一个响应,说您已经退出


我相信还有很多方法可以做到这一点,但这是我在分布式系统课程中学到的两种方法。要做到这一点,您需要在每个用户登录时为其使用异步连接。检查哪一种比烧瓶更适合这种应用。但是,如果您坚持使用flask,您必须找到一种方法,使用Tornado实现系统的异步部分,并使其与flask共存。如果您不想使用Tornado,您也可以使用,但您必须从头开始创建所有内容,这在大多数情况下并不理想。

要做到这一点,您需要在每个用户登录时为其使用异步连接。检查哪一种比烧瓶更适合这种应用。但是,如果您坚持使用flask,您必须找到一种方法,使用Tornado实现系统的异步部分,并使其与flask共存。如果你不想使用Tornado,你也可以使用,但你必须从头开始创建所有东西,这在大多数情况下并不理想。

我认为这取决于你在应用程序上下文中对“注销”的定义。正如用户1736436所说,如果只是他们是否点击了“注销”按钮的问题,那就相当简单了。当然,如果用户停止上网,或者浏览器崩溃,你就不会知道了

如果您正在使用其他实时连接,如WebSocket,则可以将其定义为表示该套接字是否打开。Websocket实现通常具有某种可以在服务器端读取的状态属性(例如gevent Websocket套接字具有布尔属性。关闭,您可以检查)


如果您选择heartbeat路径,您可能最终会使用setInterval回调在Javascript中触发它,并在服务器上编写某种定时进程,以便在一段时间内没有响应的情况下采取一些操作

我认为这取决于你在应用程序上下文中对“注销”的定义。正如用户1736436所说,如果只是他们是否点击了“注销”按钮的问题,那就相当简单了。当然,如果用户停止上网,或者浏览器崩溃,你就不会知道了

如果您正在使用其他实时连接,如WebSocket,则可以将其定义为表示该套接字是否打开。Websocket实现通常具有某种可以在服务器端读取的状态属性(例如gevent Websocket套接字具有布尔属性。关闭,您可以检查)


如果您选择heartbeat路径,您可能最终会使用setInterval回调在Javascript中触发它,并在服务器上编写某种定时进程,以便在一段时间内没有响应的情况下采取一些操作

您可以轻松地使用进行监控。使用它的优点是,您可以实时监视它。以下内容将有所帮助:

项目目录

Project
|
|-> templates
|   |
|   |-> home.html
|   |-> login.html
|   |-> logout.html
|
|-> app.py
app.py

Project
|
|-> templates
|   |
|   |-> home.html
|   |-> login.html
|   |-> logout.html
|
|-> app.py
从烧瓶导入烧瓶,渲染\u模板
从flask_socketio导入socketio,发射
app=烧瓶(名称)
app.config['SECRET_KEY']='SecretKey@123'
socket=SocketIO(应用程序)
@应用程序路径(“/”)
def index():
返回渲染模板('home.html')
@app.route(“/login/”)
def登录(用户名):
'''
当用户登录时。
'''
返回呈现模板('login.html',username=username)
@app.route(“/logout/”)
def注销(用户名):
'''
当用户注销时。
'''
返回呈现模板('logout.html',username=username)
@socket.on('在线')
def在线(数据):
emit('status_change',{'username':data['username'],'status':'online'},broadcast=True)
@socket.on('offline')
def在线(数据):
emit('status_change',{'username':data['username'],'status':'offline'},broadcast=True)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
socket.run(应用程序)
home.html


var socket=io();
socket.on('status_change',函数(数据){
console.log('状态已更改:',数据)
});
login.html


var socket=io();
emit('online',{'username':{{{{username}}});
logout.html


var socket=io();
emit('offline',{'username':{{{{username}}});
现在,使用上面的代码,在两个选项卡中打开链接,在第一个选项卡中,如果点击链接,那么在第二个选项卡的控制台中,您将看到,
状态更改:{username:“A”,Status:“online”}
。现在,在第一个选项卡中,如果点击链接,那么您将在第二个选项卡的控制台中看到
状态更改:{username:“A”,状态:“offline”}


我希望这会有帮助。

您可以轻松地使用监控。使用它的优点是,您可以实时监视它。以下内容将有所帮助:

项目目录

Project
|
|-> templates
|   |
|   |-> home.html
|   |-> login.html
|   |-> logout.html
|
|-> app.py
app.py

Project
|
|-> templates
|   |
|   |-> home.html
|   |-> login.html
|   |-> logout.html
|
|-> app.py
从烧瓶导入烧瓶,渲染\u模板
从flask_socketio导入socketio,发射
app=烧瓶(名称)
app.config['SECRET_KEY']='SecretKey@123'
插座=