参考ngin官方模块对于共享内存的使用,可以在配置文件中对共享内存进行配置
{
ngx_string("srs_request_node_zone"),
NGX_HTTP_MAIN_CONF|NGX_CONF_TAKE1,
ngx_http_srs_request_node_zone,
0,
0,
NULL
},
如上代码,配置参数为共享内存信息配置
srs_request_node_zone zone=test:400M;
这个配置说明配置一个名为test的400M大小的共享内存,在初始化模块的时候,会调用 ngx_http_srs_request_node_zone进行配置(主要看注释的代码):
static char *
ngx_http_srs_request_node_zone(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {
u_char *p;
ssize_t size;
ngx_str_t *value, name, s;
ngx_shm_zone_t *shm_zone;
ngx_http_srs_hook_ctx_t *ctx;
ctx = ngx_pcalloc(cf->pool, sizeof(ngx_http_srs_hook_ctx_t));
if (ctx == NULL) {
return NGX_CONF_ERROR;
}
value = cf->args->elts; //获取配置的参数,有两个一个是配置名srs_request_node_zone , 一个是配置的参数zone=test:400M
size = 0;
name.len = 0;
if (ngx_strncmp(value[1].data, "zone=", 5) == 0) //对配置解析获取共享内存名和大小
{
name.data = value[1].data + 5;
p = (u_char *) ngx_strchr(name.data, ':');
if (p == NULL)
{
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"invalid zone size \"%V\"", &value[1]);
return NGX_CONF_ERROR;
}
name.len = p - name.data;
s.data = p + 1;
s.len = value[1].data + value[1].len - s.data;
size = ngx_parse_size(&s);
if (size == NGX_ERROR)
{
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"invalid zone size \"%V\"", &value[1]);
return NGX_CONF_ERROR;
}
if (size < (ssize_t) (8 * ngx_pagesize))
{
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,"zone \"%V\" is too small", &value[1]);
return NGX_CONF_ERROR;
}
}
else
{
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,