当前位置:首页>python>今天聊聊 WebSocket:Python 的“话痨”模块!

今天聊聊 WebSocket:Python 的“话痨”模块!

  • 2026-06-28 06:01:44
今天聊聊 WebSocket:Python 的“话痨”模块!

🧠 一、WebSocket:让客户端和服务器谈恋爱都能实时同步呼吸的神秘协议!

昨天我和服务器吵架了。我说一句话,它半天才回我一句“OK”,还得我先开口。我气得直想问:“咱俩这是异地恋吗?!”

这时候我突然意识到——HTTP 的世界里,真的是“我主动你被动”,一切靠请求。可我想要的是“你侬我侬、互通有无”的关系。于是,我找到了它——

📦 二、websocket 模块是干嘛的?

来,我们八卦一下 WebSocket 这个角色👇

它是谁?——它是 TCP 家族里的“健谈小子”,专门为那些“我要实时更新”的场景而生。

【核心特性小剧场】

  • 🗣 全双工通信:客户端和服务器都能说话,不再是单口相声,而是脱口秀对话。

  • ⚡ 低延迟:没了 HTTP 那堆“请求头问候语”,一秒钟能说八句话。

  • 💡 事件驱动:一切都靠监听和触发事件,活像个情绪稳定的前端开发者。

  • 🔄 持久连接:一次握手,终身不散(除非你主动关掉)。

总结一句话:

WebSocket 就是让“网页和服务器一直在线聊天”的协议。

🧪 三、实战演示

先来个“程序员版聊天室”👇

Flask代码示例

from flask import Flask, render_templatefrom flask_socketio import SocketIO, send, emitapp = Flask(__name__)app.config['SECRET_KEY'] = 'your_secret_key'socketio = SocketIO(app)# 路由到首页@app.route('/')def index():    return render_template('index.html')# 处理客户端发送的默认 message 事件@socketio.on('message')def handle_message(msg):    print(f"收到:{msg}")    # 将消息广播给所有客户端    send(f"你说啥?我听见啦:{msg}", broadcast=True)# 处理自定义事件@socketio.on('custom_event')def handle_custom_event(data):    print(f"Received custom event with data: {data}")    emit(        'response_event',        {'response''Got it!'},        broadcast=True    )if __name__ == '__main__':    socketio.run(app, debug=True)

前端代码示例

<!DOCTYPE html><htmllang="en"><head> <metacharset="UTF-8"> <title>WebSocket Chat</title> <scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.6.1/socket.io.min.js"></script></head><body>  <h1>WebSocket Chat</h1>  <inputid="messageInput"placeholder="Type your message..." />  <buttononclick="sendMessage()">Send</button>  <ulid="messages"></ul>  <script>  // 建立 WebSocket 连接  const socket = io();  // 监听服务器的消息  socket.on('message'function(msg) {    const messagesList = document.getElementById('messages');    const newMessage = document.createElement('li');    newMessage.textContent = msg;    messagesList.appendChild(newMessage);    });  // 发送消息到服务器  function sendMessage() {    const input = document.getElementById('messageInput');    const message = input.value;    socket.send(message);    input.value = '';    }    </script>  </body></html>

运行后打开浏览器,输入一条消息……没错,服务器也会回你一句话。

这时候你可能会感叹:

“我写代码写了十年,终于有程序主动跟我说话了。”


八卦一下 WebSocket 的隐藏技能

上次我们说过,WebSocket 就像个话痨的协议这次咱深入一点,看看它还有哪些骚操作👇

1️⃣ 多房间支持

它能把用户分组,就像聊天室开了多个包厢。你在 A 房间聊八卦,B 房间那边在讲八股,两不干扰。

🕹 场景:多人游戏房间、群聊、团队协作。


2️⃣ 消息持久化与重发机制

掉线了也不怕,重要消息可以存数据库,等你重新连上,服务器就像老妈一样:“刚刚跟你说的再听一遍!”

🧾 场景:聊天记录、交易通知。


3️⃣ 负载均衡与分布式

当连接多得像春运人流时,一个服务器肯定顶不住。这时候要用 Redis 或 RabbitMQ 来分担压力。

⚙ 场景:高并发聊天室、实时监控。


4️⃣ 安全性增强

WSS 就是 HTTPS 的“兄弟”,加密聊天不怕偷窥。再加个 Token 验证身份,防止“假用户潜伏群聊”。


5️⃣ 二进制支持

不仅能发文字,还能发图片、音频、视频。未来连表情包都能走 WebSocket 通道了。

搞个能一起画画的白板!

我们今天不光聊原理,直接上手做个“多人实时白板”!

这玩意干嘛用?👉 就像 Figma,但我们用 Flask + WebSocket 实现。

Flask代码示例

from flask import Flask, render_templatefrom flask_socketio import SocketIO, emit, join_room, leave_roomapp = Flask(__name__)app.config['SECRET_KEY'] = 'your_secret_key'socketio = SocketIO(app)# 房间管理rooms = {}@app.route('/')def index():    return render_template('whiteboard.html')@socketio.on('join_room')def handle_join_room(data):    username = data['username']    room = data['room']    join_room(room)    rooms.setdefault(room, []).append(username)    emit('user_joined', {'username': username, 'room': room}, to=room)@socketio.on('leave_room')def handle_leave_room(data):    username = data['username']    room = data['room']    leave_room(room)    if room in rooms and username in rooms[room]:        rooms[room].remove(username)    emit('user_left', {'username': username, 'room': room}, to=room)@socketio.on('draw')def handle_draw(data):    room = data['room']    emit('draw', data, to=room)if __name__ == '__main__':    socketio.run(app, debug=True)

前端代码示例

<!DOCTYPE html><htmllang="en"><head>    <metacharset="UTF-8">    <title>Real-Time Whiteboard</title>    <scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.6.1/socket.io.min.js"></script>    <style>        canvas {            border1px solid black;            cursor: crosshair;        }    </style></head><body>    <h1>Real-Time Whiteboard</h1>    <inputid="username"placeholder="Enter your name" />    <inputid="room"placeholder="Enter room name" />    <buttononclick="joinRoom()">Join Room</button>    <buttononclick="leaveRoom()">Leave Room</button>    <canvasid="whiteboard"width="800"height="600"></canvas>    <script>        const canvas = document.getElementById('whiteboard');        const context = canvas.getContext('2d');        let drawing = false;        const socket = io();        // Draw on canvas        canvas.addEventListener('mousedown'() => drawing = true);        canvas.addEventListener('mouseup'() => drawing = false);        canvas.addEventListener('mousemove', draw);        function draw(event) {            if (!drawing) return;            const rect = canvas.getBoundingClientRect();            const x = event.clientX - rect.left;            const y = event.clientY - rect.top;            context.lineTo(x, y);            context.stroke();            socket.emit('draw', { x, y, room: currentRoom });        }        // Handle incoming draw events        socket.on('draw'(data) => {            context.lineTo(data.x, data.y);            context.stroke();        });        // Room management        let currentRoom = null;        function joinRoom() {            const username = document.getElementById('username').value;            const room = document.getElementById('room').value;            currentRoom = room;            socket.emit('join_room', { username, room });        }        function leaveRoom() {            const username = document.getElementById('username').value;            const room = currentRoom;            socket.emit('leave_room', { username, room });            currentRoom = null;        }        // Notifications        socket.on('user_joined'(data) => {            console.log(`${data.username} joined ${data.room}`);        });        socket.on('user_left'(data) => {            console.log(`${data.username} left ${data.room}`);        });    </script></body></html>

画几笔试试,多开几个浏览器窗口,你会发现每一笔都能同步出现那一刻,你可能会想:

“这感觉,简直像魂斗罗的双人模式——但我们画的是bug。”

系统功能概述:让服务器“自我监控”

我们都知道,WebSocket 是实时通信的神器,但如果你一不小心,成千上万个客户端同时涌进来就可能出现以下名场面:

“刚刚那条消息怎么慢了两秒?”“连接又掉了?!”“我这边发了消息,你那边还在喝茶?”

这时候你就会意识到——再炫酷的实时系统也得配个性能监控仪表盘就像赛车得有转速表一样,不然翻车都不知道咋翻的。

我们来做一个小系统,能实时展示三大指标👇:

1️⃣ 当前连接数:现在有多少客户端连着。2️⃣ 每秒消息数(吞吐量):系统每秒能处理多少消息。3️⃣ 平均延迟(latency):从客户端发消息到收到确认的平均耗时。

而且这些数据会被实时推送到前端,前端还会用 Chart.js 把延迟画成折线图,一眼就能看出系统的“健康状况”。

Flask代码示例

import timefrom flask import Flask, render_templatefrom flask_socketio import SocketIO, emitapp = Flask(__name__)app.config['SECRET_KEY'] = 'your_secret_key'socketio = SocketIO(app)# 监控数据存储metrics = {    "connections"0,    "message_count"0,    "average_latency"0,    "latency_samples": []}# 记录连接数@app.route('/')def index():    return render_template('monitor.html')@socketio.on('connect')def handle_connect():    metrics["connections"] += 1    emit("server_status", metrics, broadcast=True)@socketio.on('disconnect')def handle_disconnect():    metrics["connections"] -= 1    emit("server_status", metrics, broadcast=True)@socketio.on('send_message')def handle_message(data):    start_time = data["timestamp"]    latency = time.time() - start_time    # 更新监控数据    metrics["message_count"] += 1    metrics["latency_samples"].append(latency)    if len(metrics["latency_samples"]) > 100:  # 保留最近100次的延迟数据        metrics["latency_samples"].pop(0)    metrics["average_latency"] = sum(metrics["latency_samples"]) / len(metrics["latency_samples"])    # 广播消息并发送监控状态    emit("receive_message", {"message": data["message"], "latency": latency}, broadcast=True)    emit("server_status", metrics, broadcast=True)# 后台定时推送状态更新def monitor_system():    while True:        socketio.emit("server_status", metrics)        time.sleep(1)if __name__ == '__main__':    socketio.start_background_task(monitor_system)    socketio.run(app, debug=True)

前端代码示例

<!DOCTYPE html><htmllang="en"><head>    <metacharset="UTF-8">    <title>WebSocket Performance Monitor</title>    <scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.6.1/socket.io.min.js"></script>    <scriptsrc="https://cdn.jsdelivr.net/npm/chart.js"></script>    <style>        #metrics { margin-top20px; }        canvas { max-width600px; }    </style></head><body>    <h1>WebSocket Performance Monitor</h1>    <divid="metrics">        <p>Current Connections: <spanid="connections">0</span></p>        <p>Messages Per Second: <spanid="message_count">0</span></p>        <p>Average Latency: <spanid="average_latency">0</span> ms</p>    </div>    <canvasid="latencyChart"></canvas>    <script>        const socket = io();        // 更新实时数据        socket.on('server_status'function(metrics) {            document.getElementById('connections').innerText = metrics.connections;            document.getElementById('message_count').innerText = metrics.message_count;            document.getElementById('average_latency').innerText = (metrics.average_latency * 1000).toFixed(2);            // 更新图表数据            if (metrics.average_latency !== undefined) {                addData(latencyChart, new Date().toLocaleTimeString(), metrics.average_latency * 1000);            }        });        // Chart.js 实现延迟折线图        const ctx = document.getElementById('latencyChart').getContext('2d');        const latencyChart = new Chart(ctx, {            type'line',            data: {                labels: [],                datasets: [{                    label'Average Latency (ms)',                    data: [],                    borderColor'rgba(75, 192, 192, 1)',                    tension0.1                }]            },            options: {                responsivetrue,                scales: {                    x: {                        title: {                            displaytrue,                            text'Time'                        }                    },                    y: {                        title: {                            displaytrue,                            text'Latency (ms)'                        }                    }                }            }        });        function addData(chart, label, data) {            if (chart.data.labels.length > 20) { // 限制图表数据点数量                chart.data.labels.shift();                chart.data.datasets[0].data.shift();            }            chart.data.labels.push(label);            chart.data.datasets[0].data.push(data);            chart.update();        }    </script></body></html>

没有监控的实时系统,就像没后视镜的赛车——你永远不知道自己啥时候出事。

🔍 四、冷知识 or 常见坑

【冷知识1】WebSocket ≠ HTTP。HTTP 是“我问你答”,WebSocket 是“两边都话痨”。

【冷知识2】想用 Flask 实现 WebSocket?别傻了,Flask 本体不支持,要靠 Flask-SocketIO 才能“变身实时系选手”。

【冷知识3】别忘了用 eventlet 或 gevent否则你的服务器性能就像 2G 网络的微信语音,一卡一卡的。


🧠 五、总结:三句话带走今天的知识点

总结时间到!(不是 time.time() 哦~)

  • WebSocket 是能让网页和服务器随时聊天的协议;

  • Flask 想玩它要靠 Flask-SocketIO 扩展;

  • 一旦用上它,你的网页立刻从“木讷”变“灵动”!

🎯 今日flag:我一定要用 WebSocket 写个聊天室,看看哪位同事最话痨。


📮 六、互动 + 彩蛋

👀 留个言:你希望服务器主动跟你聊点啥?(A. 夸我代码写得好;B. 提醒我早点下班;C. 报个股票行情?)

🐣 今日彩蛋:WebSocket 的名字里虽然有 “Web”,但它也能跑在 IoT 设备上。也就是说——哪怕你家电饭煲想发个消息给你,它都能“Socket 一下”!

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 01:02:31 HTTP/2.0 GET : https://f.mffb.com.cn/a/500636.html
  2. 运行时间 : 0.086357s [ 吞吐率:11.58req/s ] 内存消耗:4,560.89kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=9afbc3bd7f8d8e48989c197b903bbd9b
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000738s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000846s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000373s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000270s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000503s ]
  6. SELECT * FROM `set` [ RunTime:0.000215s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000530s ]
  8. SELECT * FROM `article` WHERE `id` = 500636 LIMIT 1 [ RunTime:0.000480s ]
  9. UPDATE `article` SET `lasttime` = 1783011751 WHERE `id` = 500636 [ RunTime:0.008720s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000245s ]
  11. SELECT * FROM `article` WHERE `id` < 500636 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000414s ]
  12. SELECT * FROM `article` WHERE `id` > 500636 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000339s ]
  13. SELECT * FROM `article` WHERE `id` < 500636 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000548s ]
  14. SELECT * FROM `article` WHERE `id` < 500636 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000861s ]
  15. SELECT * FROM `article` WHERE `id` < 500636 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.004563s ]
0.087944s