使用flask-restful和flask-socketio 写一个前后端分离的聊天程序
时间: 2023-12-03 08:45:56 浏览: 143
基于Socket编写聊天程序
好的,以下是使用 Flask-RESTful 和 Flask-SocketIO 构建前后端分离的聊天程序的示例代码:
后端代码:
```python
from flask import Flask, request
from flask_restful import Resource, Api
from flask_cors import CORS
from flask_socketio import SocketIO, send, emit
app = Flask(__name__)
api = Api(app)
CORS(app)
socketio = SocketIO(app, cors_allowed_origins='*')
class Chat(Resource):
def get(self):
return {'message': 'Welcome to the chat app!'}
def post(self):
data = request.get_json()
message = data['message']
emit('message', message, broadcast=True)
return {'message': message}
api.add_resource(Chat, '/chat')
if __name__ == '__main__':
socketio.run(app, debug=True)
```
前端代码:
```html
<!DOCTYPE html>
<html>
<head>
<title>Chat App</title>
</head>
<body>
<h1>Chat App</h1>
<div id="messages"></div>
<form>
<input id="message" type="text">
<button type="submit" id="send">Send</button>
</form>
<script src="https://cdn.socket.io/socket.io-3.1.0.min.js"></script>
<script>
const socket = io('http://localhost:5000');
socket.on('message', function (data) {
const messages = document.getElementById('messages');
messages.innerHTML += '<p>' + data + '</p>';
});
const form = document.querySelector('form');
form.addEventListener('submit', function (event) {
event.preventDefault();
const input = document.getElementById('message');
const message = input.value;
socket.emit('message', message);
input.value = '';
});
</script>
</body>
</html>
```
在这个示例中,我们创建了一个名为 Chat 的资源,其中 GET 请求将返回欢迎消息,而 POST 请求将广播收到的消息。我们使用 Flask-SocketIO 在后端处理 WebSocket 连接,并使用 emit 函数将消息发送给所有连接的客户端。前端代码使用 Socket.IO 客户端库来建立 WebSocket 连接,并使用 emit 函数将用户输入的消息发送到服务器。收到服务器发送的消息时,前端代码将其显示在页面上。
要运行此示例,请确保已安装 Flask、Flask-RESTful、Flask-Cors 和 Flask-SocketIO,并在终端中运行以下命令:
```
$ export FLASK_APP=app.py
$ flask run
```
然后在浏览器中打开 http://localhost:5000/,即可开始聊天。
阅读全文