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编程等)、开发工具(交叉编译、调试工具等)以及实际项目经验分享。专栏将采用理论结合实践的方式,每个知识点都会附带相关的面试真题和答案解析。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务