基于Flask+websocket实现在线聊天系统
S3a Lv3

基于Flask+websocket实现在线聊天系统

​ web开发就是基于浏览器进行人机交互,当访客登录到指定网址后,不仅可以看到浏览器渲染的画面,同时还可以与后台进行一些操作,再通过浏览器返回后台服务器处理的结果,这段时间一直在摸索利用flask框架来做点有意思的事

什么是Flask?

Flask是一个轻量级的 Python web 开发框架,它为开发者提供了一个简单、直观的方式来创建 web 应用。由于其“微”特性,你可以从一个简单的单文件应用开始,然后根据需要增加更多功能。

Websockets 和 Flask-SocketIO

Websockets 是一个网络通信协议,允许服务器和客户端之间进行双向实时通信。与传统的 HTTP 请求相比,Websockets 提供了一个持久的连接,使得数据能够实时、高效地在双方之间流动。
Flask-SocketIO 则是一个 Flask 插件,它使得在 Flask 应用中集成 Websockets 变得非常简单。不仅如此,它还提供了一系列的高级功能,如广播、命名空间和房间支持,使得创建复杂的实时应用变得轻而易举。

大概功能

用户管理功能:包括账号登录、注册等功能。

好友管理功能:允许用户添加和删除好友。

即时聊天功能:用户可以进行实时的聊天,并且通过@用户名 可以进行私聊。

1
2
3
4
5
6
7
8
9
10
11
'/'(首页):如果用户未登录,则重定向到登录页面;否则,重定向到聊天页面。
'/login':处理用户登录,检查凭据是否与数据库匹配。
'/chat':如果用户已登录,则渲染聊天页面;否则,重定向到登录页面。
'/logout':通过删除用户的会话来注销用户。
'/register':处理用户注册,检查用户名是否唯一,并将用户添加到数据库中。
定义WebSocket处理程序:

'message':处理传入的聊天消息并将其广播到适当的房间。
'join':处理用户加入聊天房间并更新房间中在线用户的列表。
'leave':处理用户离开聊天房间并更新房间中在线用户的列表。
if __name__ == '__main__':部分,创建数据库表并运行应用程序,允许WebSocket通信以实时处理聊天消息。

创建在线聊天系统

  1. 安装必要的库:
1
pip install Flask flask-socketio
  1. 初始化Flask 应用并集成SocketIO:
1
2
3
4
5
6
from flask import Flask, render_template, request, redirect, url_for, session, flash, jsonify
from flask_socketio import SocketIO, join_room, leave_room, emit


app = Flask(__name__)
socketio = SocketIO(app)
  1. 定义简单的路由一呈现聊天室的前端界面:
1
2
3
4
5
@app.route('/')
def index():
if 'username' in session:
return redirect(url_for('chat'))
return render_template('login.html')
  1. 为聊天室事件(如加入、发送消息和离开)添加 SocketIO 事件处理函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@socketio.on('join')
def join(data):
room = data['room']
join_room(room)
online_users.add(session['username'])
emit('update_online_users', {'online_users': list(online_users)}, room=room)


@socketio.on('leave')
def leave(data):
room = data['room']
leave_room(room)
online_users.remove(session['username'])
emit('update_online_users', {'online_users': list(online_users)}, room=room)
  1. 最后启动flask应用:
1
2
3
4
5
if __name__ == '__main__':
with app.app_context():
db.create_all()
socketio.run(app, debug=True)
# socketio.run(app, host='0.0.0.0', port=80)

项目展示

由于篇幅有限,如需系统完整代码,可点击主页添加QQ获取

image

总结

借助 Flask 和 Flask-SocketIO,你可以轻松创建一个功能齐全的在线聊天室。而 Websockets 保证了数据在服务器和客户端之间的实时交互,为用户提供了一个无缝的体验。这只是一个基础案例,通过该案例我们可以尝试扩展出很多功能,比如在线客服等,并与数据库等技术结合起来,部署在服务器上实现一个自己的通信系统。

 Comments
Comment plugin failed to load
Loading comment plugin