C语言实现发布者订阅者模型
使用 C 语言实现发布者-订阅者(Publish-Subscribe,简称 Pub/Sub)模型,是通过函数指针、事件管理结构、数组或链表等基本机制,模拟一种“消息驱动、解耦通信”的机制。下面从概念、核心结构、实现流程和代码示例四个部分进行详细讲解。
一、概念
发布者-订阅者模型是一种消息传递模式,其中:
- 发布者(Publisher):只负责发布消息,不知道消息会被谁接收。
- 订阅者(Subscriber):注册对某类消息的兴趣,一旦消息发布,就会接收到通知。
- 事件管理器:维护事件和订阅者之间的关系,是中介。
这种模式具有较强的解耦性:发布者和订阅者之间不直接通信。
二、核心结构设计
为了实现 Pub/Sub 模型,需要以下结构:
1. 回调函数类型定义
typedef void (*Callback)(const char* message);
每个订阅者提供一个函数指针,作为回调函数接收消息。
2. 事件结构体
#define MAX_SUBSCRIBERS 10 typedef struct { const char* event_name; Callback subscribers[MAX_SUBSCRIBERS]; int subscriber_count; } Event;
用于记录一个事件名及其对应的所有订阅者函数。
3. 全局事件列表
#define MAX_EVENTS 10 static Event event_list[MAX_EVENTS]; static int event_count = 0;
用于维护所有事件及其订阅者。
三、实现流程
1. subscribe(event_name, callback)
:订阅事件
- 遍历已有事件,查找匹配的事件名。
- 如果找到,就将回调函数加入其订阅者列表。
- 如果未找到,创建一个新的事件并添加订阅者。
2. publish(event_name, message)
:发布事件
- 查找指定事件名。
- 遍历其所有订阅者,依次调用每个回调函数,传入消息。
四、完整示例代码
#include <stdio.h> #include <string.h> #define MAX_EVENTS 10 #define MAX_SUBSCRIBERS 10 typedef void (*Callback)(const char* message); typedef struct { const char*
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
嵌入式面试八股文全集 文章被收录于专栏
这是一个全面的嵌入式面试专栏。主要内容将包括:操作系统(进程管理、内存管理、文件系统等)、嵌入式系统(启动流程、驱动开发、中断管理等)、网络通信(TCP/IP协议栈、Socket编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。