gpt4 book ai didi

c - 尝试通过 apache 模块强制保持事件状态

转载 作者:行者123 更新时间:2023-11-30 17:08:42 25 4
gpt4 key购买 nike

这个任务对我来说似乎很简单,但我很困惑。我试图用这段代码实现的目标是将 connection:keep-alive 添加到每个输出 header ,无论我从服务器请求哪个页面。然后,如果返回的页面给出 301 或 302(重定向状态),我只会添加该 header 。这是因为我不希望客户端在到达重定向页面后必须打开新连接。

我的代码如下所示,我尝试按照 http://www.apachetutor.org/dev/brigades 的说明进行操作而是让事情变得更简单、更容易理解。

该代码可以使用 apxs 正常编译,但不会对输出执行任何操作。我可能做错了什么?我正在寻找一种不会浪费不必要内存的解决方案。

#include "httpd.h"
#include "http_core.h"
#include "http_log.h"
#include "http_protocol.h"
#include "http_config.h"
#include "apr_buckets.h"
#include "apr_general.h"
#include "apr_lib.h"
#include "util_filter.h"
#include "http_request.h"

static apr_status_t OUTF(ap_filter_t *f,apr_bucket_brigade *pbbIn){
char *lp=0;
const char *data;
request_rec* r=f->r;
conn_rec* c=r->connection;
apr_bucket *pbktIn;
apr_size_t len;
for (pbktIn=APR_BRIGADE_FIRST(pbbIn);pbktIn!=APR_BRIGADE_SENTINEL(pbbIn);pbktIn=APR_BUCKET_NEXT(pbktIn)){
if(APR_BUCKET_IS_EOS(pbktIn)){continue;}
if (apr_bucket_read(pbktIn,&data,&len,APR_BLOCK_READ) != APR_SUCCESS){continue;}
if (!lp){
lp=strstr(data,"\r\n");
if (lp){
apr_bucket_split(pbktIn,(lp-data));
pbktIn=APR_BUCKET_NEXT(pbktIn);
const char* ka="connection:keep-alive\r\n";
//trying to insert "connection:keep-alive" into output data
APR_BUCKET_INSERT_BEFORE(pbktIn,apr_bucket_transient_create(ka,strlen(ka),c->bucket_alloc));
apr_bucket_split(pbktIn,strlen(ka));
APR_BUCKET_REMOVE(pbktIn);
pbktIn=APR_BUCKET_NEXT(pbktIn);
}
}
}
return ap_pass_brigade(f->next,pbbIn);
}

static void INS(request_rec *r){ap_add_output_filter("30X",NULL,r,r->connection);}

static void f301_register_hooks(apr_pool_t *p){
ap_hook_insert_filter(INS,NULL,NULL,APR_HOOK_FIRST);
ap_register_output_filter("30X",OUTF,NULL,AP_FTYPE_RESOURCE);
}

module AP_MODULE_DECLARE_DATA f301_module = {STANDARD20_MODULE_STUFF,NULL,NULL,NULL,NULL,NULL,f301_register_hooks};

最佳答案

在 HTTP 1.1 中,持久连接是默认设置。只需确保您的服务器配置中有 KeepAlive on 即可,不要想太多。

关于c - 尝试通过 apache 模块强制保持事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33556790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com