HTTP 与 WebSocket 教程

此页介绍如何使用 libcc 内置的 HTTP 解析与 WebSocket 支持。示例基于项目中的 `tests/test_http.c``tests/test_wss.c`,此处给出精简版。

简易 HTTP 服务

#include <libcc.h>
#include <stdio.h>

/* 精简:监听端口并在收到请求时返回静态页面 */
int main(void) {
    struct sockaddr_in sa;
    _cc_async_event_t async;
    _cc_event_t *e;

    _cc_install_socket();
    if (!_cc_register_poller(&async)) return -1;

    e = _cc_event_alloc(&async, _CC_EVENT_ACCEPT_);
    e->callback = NULL; /* 在完整实现中设置处理函数 */
    e->timeout = 60000;

    _cc_inet_ipv4_addr(&sa, nullptr, 8082);
    _cc_tcp_listen(&async, e, (_cc_sockaddr_t*)&sa, sizeof(struct sockaddr_in));

    while (1) {
        async.wait(&async, 100);
    }
    async.free(&async);
    return 0;
}

WebSocket 指南

完整的 WebSocket 实现涉及握手、掩码、分帧等,参考 `tests/test_wss.c`。通常流程:

  1. 在 accept 后读取 HTTP 请求头并检测 Upgrade: websocket
  2. 计算 Sec-WebSocket-Accept 并回复 101 Switching Protocols
  3. 进入 WebSocket 数据帧解析循环(见 `_cc_ws_header_parser`, `_cc_ws_mask` 等辅助函数)