flask-socketio 简单判定用户是否在线
其实呢,我这个是简化版,只跟大家说下原理,对于flask-socketio稍微了解点的都知道,不管是前端和服务端开始连接还是断开连接都可以收到消息提醒,那么我们就利用这点特性做一个简易版的用户在线判断,首先是服务端,有条件的建议使用数据库,直接更改数据库对应状态就行,这里我就只使用session和txt来实现了。
废话不多说直接上代码
flask服务端代码:
from flask import Flask, render_template, request, session
from flask_socketio import SocketIO, join_room
app = Flask(__name__)
app.config['SECRET_KEY'] = 'SECRETKEY'
socketio = SocketIO()
socketio.init_app(app)
@app.route('/')
def hello_world():
username = 'kge123666' # 这里是用户名设定
session['username'] = username # 这里用的session进行操作
return render_template('index.html')
@socketio.on('connect')
def connected_msg():
username = session.get('username')
if username:
with open('status.txt', 'w') as f: # 这里用的是txt文本文档,使用时还是要替换成数据库
f.write('在线')
print('用户已连接!')
print("Session:" + session.get('username'))
@socketio.on('disconnect')
def disconnect_msg():
username = session.get('username')
if username:
with open('status.txt', 'w') as f: # 这里用的是txt文本文档,使用时还是要替换成数据库
f.write('离线')
print('用户断开连接!')
print("Session:" + session.get('username'))
if __name__ == '__main__':
socketio.run(app, host='0.0.0.0', port=5000, debug=True)
html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户是否在线判断</title>
<script type="text/javascript" src="//cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript" src="//cdn.bootcss.com/socket.io/3.1.2/socket.io.min.js"></script>
</head>
<body>
<script>
var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on('connect', function () {
});
socket.on('disconnect', function () {
});
</script>
<h1>python学习交流群:926031776</h1>
</body>
</html>