【问题标题】:Apache module development, correct way to store variables of requestApache模块开发,存储请求变量的正确方法
【发布时间】:2012-12-08 06:16:19
【问题描述】:

目前我将它们存储在全局中。那是正确的方法吗?我希望变量与当前请求保持一致,并在请求完成后消失。

例如:

int data1;
int data2;

apr_status_t my_input_filter (ap_filter_t *f, apr_bucket_brigade *bb,
    ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes) {
    if (somecond1) data1 = xyz;
    if (somecond2 & data1 == xya) data2 = abc;

    if (somecond3 && data2 == abc) dosomething();
}

请注意,3个条件在过滤时可能不会一次性发生,它们可能出现在不同的时刻,但具有相同的请求。

【问题讨论】:

    标签: c apache apache-modules


    【解决方案1】:

    如果您的模块与事件或多线程包一起运行,则将其存储在全局变量中是个坏主意。

    Apache 在请求结构中提供了一个注释字典。用它来存储您的私人数据。

    【讨论】:

    • 对于 input_filter,我的 f->r 总是 NULL 我想我不能使用注释
    • 技巧#2:创建您自己的哈希表,按存储数据的连接进行索引。向 connection->pool 添加一个清理钩子,以在连接终止时删除哈希条目。
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 2018-09-15
    • 2022-11-28
    相关资源
    最近更新 更多