服务端
flask import Flask,render_template,request
from flask_socketio import SocketIO
async_mode = None
app = Flask(import_name=__name__,
static_url_path='/python', # 配置静态文件的访问url前缀
static_folder='static', # 配置静态文件的文件夹
template_folder='templates') # 配置模板文件的文件夹
app.config['SECRET_KEY'] = "lyshark"
socketio = SocketIO(app)
@app.route("/")
def index():
return render_template("index2.html")
# 出现消息后,率先执行此处
@socketio.on("message",namespace="/Socket")
def socket(message):
print("接收到消息:", message['data'])
for i in range(1,100):
socketio.sleep(1)
socketio.emit("response", # 绑定通信
{"Data":i}, # 返回socket数据
namespace="/Socket")
# 当websocket连接成功时,自动触发connect默认方法
@socketio.on("connect",namespace="/Socket")
def connect():
print("链接建立成功..")
# 当websocket连接失败时,自动触发disconnect默认方法
@socketio.on("disconnect",namespace="/Socket")
def disconnect():
print("链接建立失败..")
if __name__ == '__main__':
socketio.run(app,debug=True,host="0.0.0.0")
前端
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="https://cdn.lyshark.com/javascript/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.lyshark.com/javascript/socket.io/socket.io.min.js"></script>
</head>
<body>
<script type="text/javascript" charset="UTF-8">
$(document).ready(function() {
namespace = '/Socket';
var socket = io.connect("http://" + document.domain + ":" + location.port + namespace);
// 初始化完成后,发送一条消息
socket.emit("message",{"data":"hello lyshark"});
// 收到数据后,执行输出
socket.on('response', function(recv) {
console.log('hello lyshark ' + recv.Data)
});
});
</script>
</body>
</html>
Python客户端测试
import json
from time import sleep
import socketio
sio = socketio.Client()
@sio.on('disconnect', namespace='/Socket')
def disconnect():
print('disconnect ', sio.sid)
@sio.on('connect', namespace='/Socket')
def on_connect():
print("I'm connected to the /news namespace!")
@sio.on('message', namespace='/Socket')
def handle_message(message):
print('received message: ' + message)
def entry(n):
print('listen task channel')
sio.connect('http://127.0.0.1:5000')
sio.emit('message', n, namespace='/Socket')
print("消息发送成功!")
# sio.emit('message')
# 消息结束之后,断开连接(不调用锻炼开连接,则会一直挂起!)
# print(a)
# sio.wait()
# sleep(5)
# sio.disconnect()
if __name__ == '__main__':
n = {"code": 1, "message": "success", "userId": "10", "approvalId": "10"}
entry({"data": "socket test data"})