土法炼钢兴趣小组的算法知识备份

实战:即时聊天 (Chat Server)

目录

聊天室是网络编程的经典作业。它涉及多客户端管理和消息广播。

1. 连接管理

我们需要一个全局列表来保存所有在线用户。

struct client {
    struct bufferevent *bev;
    char username[32];
    TAILQ_ENTRY(client) next;
};

TAILQ_HEAD(client_list, client) clients;

2. 广播逻辑

当收到某个用户的消息时,遍历列表,转发给其他人。

void broadcast(const char *msg, struct client *sender) {
    struct client *c;
    TAILQ_FOREACH(c, &clients, next) {
        if (c != sender) {
            bufferevent_write(c->bev, msg, strlen(msg));
        }
    }
}

3. 鉴权与指令

我们可以定义简单的文本协议: * LOGIN <name>: 登录。 * MSG <content>: 发言。

read_cb 中解析指令。如果用户未登录(c->username 为空),则只允许 LOGIN 指令。

4. 总结

这个项目虽然简单,但它包含了即时通讯软件(IM)的核心雏形:连接维持状态同步消息分发

完整代码: 03-chat-server.c


上一篇: 08-projects/redis-lite.md - 实战:简易 Redis 下一篇: 08-projects/load-balancer.md - 实战:负载均衡器

返回 Libevent 专题索引


By .