当前位置:首页>Linux>笑不活了!Linux组播,竟是“餐厅的精准分组呼叫神器”

笑不活了!Linux组播,竟是“餐厅的精准分组呼叫神器”

  • 2026-07-02 21:28:09
笑不活了!Linux组播,竟是“餐厅的精准分组呼叫神器”

点击蓝字

关注我们

笑不活了!Linux组播,竟是“餐厅的精准分组呼叫神器”

新手必看|告别广播“全员打扰”,用餐厅类比讲透组播原理,马年轻松拿捏Linux网络通信进阶技能✅

一、前言:谁懂啊!广播太“吵”,组播才是Linux通信的“精准选手”

刚吃透Linux广播的宝子们,是不是有个灵魂吐槽:广播是好用,一条消息全员接收,但有时候真的太“吵”!就像餐厅服务员拿着扩音器喊通知,不管顾客想不想听、需不需要,所有人都得被迫接收,比如你只想通知靠窗的顾客“窗边座位有优惠”,结果整个餐厅的人都听到了,既打扰人,又浪费资源。

其实Linux里早就有解决办法——组播!它就像餐厅的“精准分组呼叫神器”,不用全员通知,也不用一对一单独喊,只要把需要通知的人分成一个“小组”,对着这个小组喊一声,只有小组里的人能听到,其他人完全不受打扰,对应到电脑世界,就是一台电脑发消息,只有加入指定“组播组”的设备能收到,既高效又不浪费资源。

很多新手一听到“组播”,就觉得它是广播的“升级版”,肯定很难学,甚至直接放弃,觉得“有广播就够了”。但其实,组播比广播更实用、更灵活,在实际开发中出场率超高,比如直播、视频会议、批量设备管理,没有组播,这些场景要么打扰全员,要么效率拉胯,就像餐厅想通知“会员顾客”专属福利,用广播太吵,用一对一通知又太累。

今天就用最接地气、最风趣的话,把Linux组播讲透,不堆底层源码,不搞复杂推导,只讲“组播是什么、和广播有啥区别、怎么用”,延续餐厅类比,全程无晦涩术语,新手跟着学,马年轻松拿捏Linux组播,再也不用被“全员打扰”或“逐个通知”折磨!

二、先搞懂:Linux组播,本质就是“餐厅的精准分组呼叫神器”

2.1 核心定义:组播 = 精准分组,只给“需要的人”发消息

先破除新手恐惧:Linux组播不是什么高深技术,本质就是“一种局域网内的精准分组通信方式”,核心逻辑比广播更灵活——发送方发送一条消息,不用发给所有设备,也不用指定单个设备,只需要发给一个“组播组”,所有加入这个组播组的设备,都能同步收到消息,没加入的设备,根本收不到,就像餐厅服务员,对着“会员小组”喊“会员专属折扣”,只有会员能听到,非会员完全不受影响。

还是用“餐厅”的类比,新手不用死记硬背,一眼就能懂组播、广播、一对一通信的区别,看完再也不混淆:

1.  一对一通信(TCP/UDP一对一):相当于送餐员给单个顾客送菜,只送指定人,其他人看不到;

2.  广播:相当于服务员用扩音器全员呼叫,不管谁都能听到,太“吵”;

3.  Linux组播:相当于服务员给“指定小组”(比如会员组、靠窗组)喊通知,只有小组里的人能听到,精准又不打扰。

补充一句:组播和广播一样,主要在局域网内使用,但比广播更灵活、更省资源——广播是“全员撒网”,不管有没有需要都发;组播是“精准捕鱼”,只给需要的设备发消息,避免资源浪费,就像餐厅通知会员福利,组播只喊会员,比广播省力气,也不打扰非会员。

2.2 灵魂拷问:有广播了,为什么还要学组播?

新手最头疼的问题:我已经会用广播了,能实现全员通知,为什么还要学组播?其实不是广播不够用,而是很多场景下,广播太“浪费”,组播才是最优解,就像餐厅通知会员福利,用广播会打扰非会员,用一对一通知又太累,组播刚好解决这个痛点,精准又高效。

举个实操场景(新手能懂的简单例子):你写一个局域网视频会议程序,需要把视频流发给所有参会设备,要是用广播,局域网内所有设备(不管参不参会)都会收到视频流,浪费大量带宽,导致参会设备卡顿;而用组播,只需要让参会设备加入同一个组播组,视频流只发给这个组,非参会设备完全不受影响,既流畅又省资源。

核心原因总结(新手记这3点就够):

1.  精准不打扰:只给需要的设备发消息,不打扰无关设备,就像餐厅分组通知,不吵到其他人;

2.  节省资源:不用给所有设备发消息,也不用逐个发送,一条消息搞定一个小组,大幅节省带宽和系统资源;

3.  适配进阶场景:视频会议、直播、批量设备分组管理、实时数据推送,这些场景广播搞不定,组播是首选,比如路由器给指定设备推送配置,用组播最高效。

小结:Linux组播,就是广播的“精准升级版”,解决了广播“全员打扰”的痛点,兼顾效率和灵活性,学会它,你就能应对更多进阶的局域网通信场景,编写更高效、更人性化的Linux网络程序。

三、新手必懂:Linux组播核心原理,马年一看就会

很多新手觉得“组播比广播难”,其实一点都不难!Linux组播的核心原理,还是基于TCP/IP协议,和广播有很多相似之处,只是多了“组播组”和“组播地址”两个关键概念,用餐厅类比,就能轻松理解,全程无晦涩术语,新手一看就懂。

重点说明:Linux组播也基于UDP协议实现(无连接、速度快,适合批量推送),核心是“组播组”和“组播地址”——组播组相当于餐厅的“小组”(比如会员组),组播地址相当于小组的“专属呼叫频道”,发送方把消息发给组播地址,只有加入这个组播组的设备,才能收到消息。

3.1 核心关键1:组播组,相当于餐厅的“专属小组”

组播组是Linux组播的核心,相当于餐厅的“专属小组”,比如会员组、靠窗组、VIP组,是一个虚拟的“集合”,设备可以自由加入或退出这个集合,就像顾客可以加入会员组,也可以退出,加入后就能收到小组专属通知,退出后就收不到。

新手不用复杂理解:组播组没有实体,就是一个逻辑上的分组,只要设备加入同一个组播组,就能接收这个组的组播消息;一个设备可以加入多个组播组,就像顾客可以同时是会员组和靠窗组的成员,能收到两个小组的通知;也可以随时退出,退出后就收不到对应组的消息。

类比记忆:组播组 = 餐厅的会员组,设备 = 顾客,加入组播组 = 成为会员,退出组播组 = 取消会员,只有会员(加入组的设备)能收到会员专属通知(组播消息)。

3.2 核心关键2:组播地址,相当于小组的“专属呼叫频道”

组播地址和广播地址类似,也是一个特殊的IP地址,但比广播地址更精准——广播地址是“全员频道”,组播地址是“小组专属频道”,发送方把消息发给这个频道,只有加入这个频道(组播组)的设备,才能听到,就像餐厅会员组有专属呼叫频道,服务员对着这个频道喊通知,只有会员能听到。

新手必记:Linux组播地址有固定范围,不用死记硬背,记住最常用的即可——224.0.0.0 ~ 239.255.255.255,这个范围的IP地址都是组播地址,比如224.0.0.1(局域网内所有设备都能收到,相当于组播里的“小广播”)、224.0.0.2(路由器专用组播地址),新手可以直接用224.0.0.100作为自己的组播地址,不用修改。

类比记忆:组播地址 = 餐厅会员组的专属呼叫频道,发送方 = 服务员,接收方 = 会员,服务员对着专属频道喊通知,只有会员能听到,非会员听不到,精准又不打扰。

3.3 实现逻辑:组播的发送和接收,就像“服务员喊小组、组员听通知”

Linux组播的实现逻辑,比广播多了“加入组播组”这一步,分为“发送方”和“接收方”,对应餐厅里的“服务员”和“小组组员”,流程依然简单,新手记一遍就能记住:

1.  发送方(服务员):创建UDP套接字(拿起呼叫器)→ 填写组播地址和端口(调到小组专属频道)→ 发送消息(对着频道喊小组通知);

2.  接收方(组员):创建UDP套接字(打开呼叫器,调到对应频道)→ 绑定组播地址和端口(锁定专属频道)→ 加入组播组(成为小组组员)→ 循环监听,接收组播消息(听服务员的小组通知)。

重点提醒:发送方和接收方的端口号必须一致,而且接收方必须“加入组播组”,才能收到组播消息,就像服务员用100频道喊会员组,顾客必须调到100频道,并且是会员,才能听到通知;没加入组播组,哪怕端口号一致,也收不到消息。

3.4 组播vs广播vs一对一:一张表看懂,不混淆

新手最容易犯的错,就是把组播、广播、一对一通信搞混,用餐厅类比,再搭配简单的区别,一次性记牢,再也不混淆:

1.  通信方式:一对一 = 送餐员给单个顾客送菜;广播 = 服务员扩音器全员喊;组播 = 服务员给指定小组喊;

2.  接收范围:一对一 = 只有指定设备能收;广播 = 同一局域网所有设备能收;组播 = 只有加入组播组的设备能收;

3.  资源消耗:一对一 = 设备越多,消耗越多;广播 = 不管设备多少,消耗固定(但浪费);组播 = 不管小组人数多少,消耗固定(精准不浪费);

4.  适用场景:一对一 = 单独通知、文件传输;广播 = 全员通知(比如餐厅打烊);组播 = 分组通知、直播、视频会议。

记忆技巧:一对一是“精准投喂”,广播是“全员撒网”,组播是“精准分组撒网”,按需选择,既不打扰,又不浪费,进阶场景首选组播。

四、新手必备:Linux组播实操代码,马年直接抄作业

Linux组播的代码,和广播很像,只是接收方多了“加入组播组”的步骤,全程基于UDP协议,注释拉满,新手直接抄,编译后就能运行,实现“发送方发组播,只有加入组播组的接收方能收到”,全程无难度,新手也能轻松上手。

重点说明:代码分为“发送方”和“接收方”两个文件,用Linux C语言编写,编译命令单独标注,新手直接复制代码、编译运行,就能看到效果;所有代码都适配新手,没有复杂逻辑,只保留核心功能,还标注了需要修改的地方(比如组播地址)。

4.1 接收方代码(multicast_recv.c):组员听通知,加入小组才能收

接收方代码,比广播多了“加入组播组”的步骤,严格按照“创建UDP套接字→绑定端口→加入组播组→循环监听”的流程编写,注释拉满,新手能看懂每一步的作用,直接抄就行,不用修改任何内容(除非想换组播地址或端口):

```Plain Text

#include <stdio.h>

#include <unistd.h>

#include <string.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#define MULTICAST_PORT 8888          // 组播端口,和发送方保持一致(专属频道)

#define MULTICAST_ADDR "224.0.0.100" // 组播地址,新手可直接用,不用修改

#define BUF_SIZE 1024                // 接收缓冲区大小

#define LOCAL_IP "0.0.0.0"           // 本地IP,绑定所有网卡,接收组播消息

int main() {

   int sock_fd;

   struct sockaddr_in recv_addr, send_addr;

   socklen_t send_addr_len = sizeof(send_addr);

   char buf[BUF_SIZE] = {0};

   struct ip_mreq mreq; // 组播组相关结构体,用于加入组播组

   // 1. 创建UDP套接字(相当于打开呼叫器,准备听小组通知)

   sock_fd = socket(AF_INET, SOCK_DGRAM, 0);

   if (sock_fd == -1) {

       printf("套接字创建失败,相当于没打开呼叫器,听不到小组通知~\n");

       return 1;

   }

   // 2. 绑定组播地址和端口(锁定专属频道,和发送方一致)

   memset(&recv_addr, 0, sizeof(recv_addr));

   recv_addr.sin_family = AF_INET;         // IPv4协议

   recv_addr.sin_port = htons(MULTICAST_PORT); // 绑定组播端口

   recv_addr.sin_addr.s_addr = inet_addr(LOCAL_IP); // 绑定所有本地IP

   if (bind(sock_fd, (struct sockaddr*)&recv_addr, sizeof(recv_addr)) == -1) {

       printf("端口绑定失败,相当于没调到正确频道,听不到小组通知~\n");

       close(sock_fd);

       return 1;

   }

   // 3. 加入组播组(成为小组组员,才能收到小组通知)

   mreq.imr_multiaddr.s_addr = inet_addr(MULTICAST_ADDR); // 组播组地址(专属频道)

   mreq.imr_interface.s_addr = inet_addr(LOCAL_IP);       // 本地IP,加入组播组

   if (setsockopt(sock_fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) == -1) {

       printf("加入组播组失败,相当于没成为小组组员,听不到通知~\n");

       close(sock_fd);

       return 1;

   }

   printf("接收方已启动,已加入组播组(地址:%s,端口:%d),等待接收组播消息...\n",

          MULTICAST_ADDR, MULTICAST_PORT);

   // 4. 循环监听组播消息(一直听着,有小组通知就接收)

   while (1) {

       memset(buf, 0, sizeof(buf));

       // 接收组播消息,同时获取发送方的IP和端口

       int recv_len = recvfrom(sock_fd, buf, sizeof(buf), 0,

                              (struct sockaddr*)&send_addr, &send_addr_len);

       if (recv_len == -1) {

           printf("接收组播消息失败,相当于没听到小组通知~\n");

           continue;

       }

       // 打印收到的组播消息和发送方信息

       printf("收到组播消息(发送方IP:%s,端口:%d):%s\n",

              inet_ntoa(send_addr.sin_addr), ntohs(send_addr.sin_port), buf);

   }

   // 退出组播组(理论上不会执行到这里)

   setsockopt(sock_fd, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));

   // 关闭套接字

   close(sock_fd);

   return 0;

}

```

编译命令(新手必记):gcc multicast_recv.c -o multicast_recv(直接编译,不用加额外参数)

运行方法:终端敲 ./multicast_recv,接收方就会启动,加入指定组播组,绑定8888端口,一直等待接收组播消息,就像组员打开呼叫器,随时准备听服务员的小组通知。

4.2 发送方代码(multicast_send.c):服务员喊小组,只给组员发通知

发送方代码,和广播发送方几乎一样,不用设置广播权限,只需要填写组播地址和端口,注释拉满,新手直接抄,不用修改任何内容(除非想换组播地址或端口):

```Plain Text

#include <stdio.h>

#include <unistd.h>

#include <string.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#define MULTICAST_PORT 8888          // 组播端口,和接收方保持一致(专属频道)

#define MULTICAST_ADDR "224.0.0.100" // 组播地址,和接收方保持一致

#define BUF_SIZE 1024                // 发送缓冲区大小

int main() {

   int sock_fd;

   struct sockaddr_in multicast_addr;

   char buf[BUF_SIZE] = {0};

   // 1. 创建UDP套接字(相当于拿起呼叫器,准备喊小组通知)

   sock_fd = socket(AF_INET, SOCK_DGRAM, 0);

   if (sock_fd == -1) {

       printf("套接字创建失败,相当于没拿到呼叫器,没法喊小组通知~\n");

       return 1;

   }

   // 2. 填写组播地址和端口(调到小组专属频道,和接收方一致)

   memset(&multicast_addr, 0, sizeof(multicast_addr));

   multicast_addr.sin_family = AF_INET;         // IPv4协议

   multicast_addr.sin_port = htons(MULTICAST_PORT); // 组播端口,和接收方一致

   multicast_addr.sin_addr.s_addr = inet_addr(MULTICAST_ADDR); // 组播组地址

   // 3. 发送组播消息(相当于服务员对着专属频道,喊小组通知)

   while (1) {

       memset(buf, 0, sizeof(buf));

       // 输入要发送的组播消息

       printf("发送方(组播):");

       fgets(buf, sizeof(buf), stdin);

       // 去掉fgets自带的换行符

       buf[strlen(buf)-1] = '\0';

       // 如果输入exit,停止发送组播

       if (strcmp(buf, "exit") == 0) {

           printf("正在停止组播...\n");

           break;

       }

       // 发送组播消息,只有加入该组播组的接收方能收到

       int send_len = sendto(sock_fd, buf, strlen(buf), 0,

                            (struct sockaddr*)&multicast_addr, sizeof(multicast_addr));

       if (send_len == -1) {

           printf("发送组播消息失败,相当于呼叫器没声音,组员听不到~\n");

           continue;

       }

       printf("组播消息已发送,只有加入组播组(%s:%d)的接收方能收到...\n",

              MULTICAST_ADDR, MULTICAST_PORT);

   }

   // 关闭套接字

   close(sock_fd);

   return 0;

}

```

编译命令(新手必记):gcc multicast_send.c -o multicast_send(直接编译,不用加额外参数)

运行方法:先在多台同一局域网的电脑上,启动接收方(./multicast_recv),这些接收方会自动加入组播组;再在其中一台电脑上启动发送方(./multicast_send),输入消息就能发送组播,只有启动了接收方(加入组播组)的电脑能收到消息,没启动接收方的电脑,完全收不到,精准又不打扰,和广播的“全员接收”形成鲜明对比。

小提醒:发送方和接收方的组播地址、端口号必须完全一致,不然接收方收不到组播消息;新手不用修改组播地址(默认224.0.0.100),直接用即可,避免写错导致失败。

五、避坑指南:新手写Linux组播,别再踩这些坑

5.1 陷阱1:接收方忘记加入组播组,导致收不到消息

新手最容易犯的错:复制接收方代码后,不小心删掉“加入组播组”的代码,或者写错组播组地址,导致接收方收不到组播消息,就像顾客想听到会员通知,却没加入会员组,哪怕调到了专属频道,也听不到。

避坑妙招:接收方一定要调用setsockopt函数,设置IP_ADD_MEMBERSHIP选项,加入指定的组播组,组播地址要和发送方一致,这一步是组播接收的关键,不能少。

5.2 陷阱2:组播地址写错,导致接收方收不到消息

新手容易犯的错:把组播地址写成广播地址(比如192.168.1.255),或者写成普通IP地址,导致组播消息发不出去,接收方收不到,就像服务员对着错误的频道喊通知,组员根本听不到。

避坑妙招:牢记组播地址的范围(224.0.0.0 ~ 239.255.255.255),新手直接用默认的224.0.0.100,不用修改,避免写错;如果要自定义,一定要在这个范围内选择。

5.3 陷阱3:发送方和接收方端口号不一致,导致接收失败

和广播、一对一通信一样,新手容易犯的错:发送方用8888端口,接收方却用8080端口,导致接收方收不到组播消息,就像服务员用100频道喊通知,组员却调到200频道,根本听不到。

避坑妙招:确保发送方和接收方的端口号完全一致,代码中默认是8888,要是想换端口,两边要一起换,不能只换一边。

5.4 陷阱4:试图用TCP协议实现组播,导致编译/运行失败

新手容易混淆协议,想用TCP协议实现组播,结果代码编译报错,或者运行后没法发送组播,其实和广播一样,组播只能基于UDP协议实现——TCP是面向连接、一对一的,和组播“无连接、一对多分组”的特性冲突,根本无法实现。

避坑妙招:牢记,Linux组播只能用UDP协议实现,写代码时,套接字类型一定要是SOCK_DGRAM,不要写成SOCK_STREAM(TCP),避免报错。

5.5 陷阱5:以为组播能跨局域网传输,导致失败

很多新手以为,组播可以跨局域网传输,比如在上海的局域网发组播,想让北京的电脑收到,结果发现接收不到,以为自己代码写错了,其实不是代码的问题,而是组播的特性——和广播一样,主要在同一局域网内传输,跨网段、跨地区很难实现(需要路由器支持,新手不用考虑)。

避坑妙招:新手暂时只关注局域网内的组播通信,不要试图跨局域网发送组播,避免做无用功;如果需要跨局域网分组通知,改用其他方式(比如TCP多客户端分组)。

六、结尾:Linux组播不难学,马年轻松玩转精准分组通信

看到这里,是不是觉得Linux组播一点都不难?其实它就是“餐厅的精准分组呼叫神器”,核心就是“分组通知,精准不打扰”,基于UDP协议实现,代码和广播很像,只是多了“加入组播组”的步骤,只要记住组播组和组播地址的关键,就能轻松实现,不用怕晦涩的术语和函数。

新手不用怕,刚开始不用追求复杂的组播逻辑,先掌握“发送方发组播、接收方加入组播组并接收消息”的简单通信,能成功运行代码、看到效果,就足够了。学会Linux组播,你就能应对直播、视频会议、分组设备管理等进阶场景,不用再被广播的“全员打扰”或一对一的“低效繁琐”折磨,编程效率直接翻倍。

记住,组播是Linux局域网通信的进阶技能,比广播更灵活、更省资源,不管是开发还是运维,懂组播,就能让你更具竞争力,离“Linux高手”又近了一步。

2026丙午马年,愿你吃透Linux组播,轻松玩转精准分组通信,不踩坑、不懵圈,编写高效网络程序一马当先,早日实现“Linux网络编程自由”!

✨ 关注我,下期解锁Linux组播进阶(组播路由、组播过滤),新手也能轻松拿捏Linux ✨

扫码关注我们

知识奇妙世界

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 22:55:31 HTTP/2.0 GET : https://f.mffb.com.cn/a/486806.html
  2. 运行时间 : 0.442182s [ 吞吐率:2.26req/s ] 内存消耗:4,863.86kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=c9ebfd2244d4c7973526a046a9971484
  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.000806s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001667s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000750s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000757s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001700s ]
  6. SELECT * FROM `set` [ RunTime:0.000592s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001507s ]
  8. SELECT * FROM `article` WHERE `id` = 486806 LIMIT 1 [ RunTime:0.007516s ]
  9. UPDATE `article` SET `lasttime` = 1783090531 WHERE `id` = 486806 [ RunTime:0.041406s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000940s ]
  11. SELECT * FROM `article` WHERE `id` < 486806 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.005146s ]
  12. SELECT * FROM `article` WHERE `id` > 486806 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001560s ]
  13. SELECT * FROM `article` WHERE `id` < 486806 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.069532s ]
  14. SELECT * FROM `article` WHERE `id` < 486806 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.090591s ]
  15. SELECT * FROM `article` WHERE `id` < 486806 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.050539s ]
0.446000s