Nginx源码学习(2)----ngx_string

5.nginx源码分析之数据结构:ngx_string ngx_string nginx的数据结构设计的非常精巧,高效,学习nginx的数据结构设计可以加深我们对于其后续代码的阅读深度。 nginx的数据结构在源码包的src/core目录中,nginx对应的文件是ngx_string.c和ngx_string.h文件: [root@rsync core]# ll ngx_string.* -rw-r--r-- 1 1001 1001 43851 阅读详情

Ngnix对一些基础的数据结构进行了自己的封装。我首先从最简单的string 这个最基础的方法下手。

主要包括了

¢ Nginx 自己的字符串 API
— 内存操作相关
— 字符串格式化
— 字符串查找
— 格式转换
¢ Base64/URL/UTF-8
¢ 字符串和数字之间的转换

 

首先看一下他的基础的结构

typedef struct {
    size_t      len;
    u_char     *data;
} ngx_str_t;


结构体ngx_str_t 中两个变量:data和len,因此,在使用的时候,其长度也要记住赋值。

 

那么下面有如下方法供其使用。

#define ngx_string(str)     { sizeof(str) - 1, (u_char *) str }
#define ngx_null_string     { 0, NULL }
#define ngx_str_set(str, text)                                               \
    (str)->len = sizeof(text) - 1; (str)->data = (u_char *) text
#define ngx_str_null(str)   (str)->len = 0; (str)->data = NULL


#define ngx_tolower(c)      (u_char) ((c >= 'A' && c <= 'Z') ? (c | 0x20) : c)
#define ngx_toupper(c)      (u_char) ((c >= 'a' && c <= 'z') ? (c & ~0x20) : c)


 

#define ngx_strncmp(s1, s2, n)  strncmp((const char *) s1, (const char *) s2, n)


/* msvc and icc7 compile strcmp() to inline loop */
#define ngx_strcmp(s1, s2)  strcmp((const char *) s1, (const char *) s2)


#define ngx_strstr(s1, s2)  strstr((const char *) s1, (const char *) s2)
#define ngx_strlen(s)       strlen((const char *) s)

#define ngx_strchr(s1, c)   strchr((const char *) s1, (int) c)


 

#define ngx_memzero(buf, n)       (void) memset(buf, 0, n)
#define ngx_memset(buf, c, n)     (void) memset(buf, c, n)


#if (NGX_MEMCPY_LIMIT)

void *ngx_memcpy(void *dst, void *src, size_t n);
#define ngx_cpymem(dst, src, n)   (((u_char *) ngx_memcpy(dst, src, n)) + (n))

#else

 

这些函数都是加了自己的前缀,可能是作者想让自己的使用标准吧,还有就是发掘几个自己的功能函数,组合一起。


这几个函数都是利用了标准C里的函数直接定义的。

这个函数作用就是找到c在p后边的数据,前提是长度小于last

static ngx_inline u_char *
ngx_strlchr(u_char *p, u_char *last, u_char c)
{
    while (p < last) {

        if (*p == c) {
            return p;
        }

        p++;
    }

    return NULL;
}


/*
 * the simple inline cycle copies the variable length strings up to 16
 * bytes faster than icc8 autodetecting _intel_fast_memcpy()
 */

static ngx_inline u_char *
ngx_copy(u_char *dst, u_char *src, size_t len)
{
    if (len < 17) {

        while (len) {
            *dst++ = *src++;
            len--;
        }

        return dst;

    } else {
        return ngx_cpymem(dst, src, len);
    }
}


取得src在dst后边的地址值。

/*
 * the simple inline cycle copies the variable length strings up to 16
 * bytes faster than icc8 autodetecting _intel_fast_memcpy()
 */

static ngx_inline u_char *
ngx_copy(u_char *dst, u_char *src, size_t len)
{
    if (len < 17) {

        while (len) {
            *dst++ = *src++;
            len--;
        }

        return dst;

    } else {
        return ngx_cpymem(dst, src, len);
    }
}

下面的这个函数就是常用的字符串转int型的一个常用函数,核心语句value = value * 10 + (*line - '0');

ngx_int_t
ngx_atoi(u_char *line, size_t n)
{
    ngx_int_t  value;

    if (n == 0) {
        return NGX_ERROR;
    }

    for (value = 0; n--; line++) {
        if (*line < '0' || *line > '9') {
            return NGX_ERROR;
        }

        value = value * 10 + (*line - '0');
    }

    if (value < 0) {
        return NGX_ERROR;

    } else {
        return value;
    }
}

 

还有很多方法,这里就不一一列举了,不过有几个方法,是对红黑树使用的一些方法。

void ngx_str_rbtree_insert_value(ngx_rbtree_node_t *temp,
    ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
ngx_str_node_t *ngx_str_rbtree_lookup(ngx_rbtree_t *rbtree, ngx_str_t *name,
    uint32_t hash);


跟多文章欢迎反问:http://blog.youkuaiyun.com/wallwind

 

 

 

Nginx C模块开发实战:从echo模块深入HTTP处理机制 Nginx C模块是实现高性能、低延迟、高确定性网络逻辑的核心技术路径。其本质是将业务逻辑深度嵌入Nginx事件驱动引擎,依托内存池管理、缓冲区链表(ngx_chain_t)、配置阶段化(preconf/postconf)和HTTP请求生命周期钩子等底层机制,规避解释器开销、进程创建与GC抖动。相比Lua、Python或反向代理方案,C模块在API鉴权、边缘动态注入、安全审计日志等场景中可达成微秒级延迟与零拷贝I/O。本文以可复现的echo模块为入口,解析ngx_module_t结构体、handler执行流 阅读详情

相关推荐

Angular多语言实战:ngx-translate动态切换与工程化落地

国际化(i18n)是现代Web应用的基础能力,其核心在于将静态文案解耦为可配置、可加载、可切换的语言资源。原理上需支持运行时语言变更、按需加载翻译包、模块级作用域隔离及健壮的错误降级机制。技术价值体现在提升用户体验一致性、支撑全球化业务敏捷迭代、降低多语言维护成本。典型应用场景包括SaaS平台语言实时切换、后台管理系统多语种适配、微前端子应用独立翻译等。本文聚焦Angular生态中ngx-translate这一成熟方案,深入解析其与Angular依赖注入、懒加载模块、变更检测的深度集成机制,并结合JSON语

aizexi2652的博客 428

Nginx安全加固:通过源码编译彻底隐藏版本号与自定义Server响应头

在Web服务器安全领域,信息泄露是常见攻击入口。攻击者常通过分析HTTP响应头中的Server字段获取服务器软件及版本信息,进而利用已知漏洞发起针对性攻击。其原理在于HTTP协议规范允许服务器在响应头中声明自身信息,而默认配置往往会暴露这些敏感指纹。从技术价值看,隐藏或伪装这些信息能有效增加攻击者的识别成本,属于纵深防御体系中的基础但关键一环。应用场景广泛,尤其适用于对安全有较高要求的生产环境、金融系统及政务平台。本文聚焦Nginx这一高性能Web服务器,通过修改核心源码并重新编译,实现从根源上彻底移除版本

weixin_33861800的博客 374

Debian 7下Nginx Server Blocks配置实战指南

Nginx Server Blocks是实现多站点托管的核心机制,其本质是基于Host头、server_name和listen指令构建的请求路由决策树。理解该机制需结合Nginx版本演进与操作系统约束——尤其在Debian 7这类遗留环境中,Nginx 1.2.1与OpenSSL 1.0.1e深度耦合,不支持http2、TLS 1.3及现代ssl_ciphers语法,导致直接套用新版配置必然失败。技术价值在于保障多域名隔离运行、独立日志与权限控制,适用于金融后台、工业网关等无法升级的生产场景。本文聚焦Deb

weixin_30952535的博客 415

Nginx学习(5)—— 基本结构(源码)

可以看到,Nginx自定义了一个带有长度的字符串结构。这意味着,data所指向的字符串并不是以 “\0” 结束的。:对src按照type方式编码,结果放到dst中。如果dst传NULL可获得结果的空间大小。:将src的前n个字符转换成小写存放到dst字符串中。:将结果放到dst中,需要保证dst有足够的空间存放结果。:log为后续在该pool上进行操作时输出日志的对象。:dst传NULL返回结果占用空间大小。:dst传NULL返回结果占用空间大小。

Stars____的博客 1424

Qwen3.6 OpenAI兼容反代:Nginx+Lua协议桥接实战

大模型API网关的核心是协议兼容性,而非简单流量转发。OpenAI API作为行业事实标准,其/v1/chat/completions接口规范(含messages结构、stream流式响应、usage字段、HTTP状态码语义等)已成为各类AI工具链的接入前提。Qwen3.6作为主流开源大语言模型,原生接口与OpenAI存在七处关键差异,需通过协议翻译层实现字段映射、role标准化、delta重构与rate limit透传。本文聚焦Nginx+OpenResty+Lua技术栈,构建轻量、高性能、生产就绪的反向

weixin_34337381的博客 308

液冷方式介绍

如果将直径在1~100nm的颗粒悬置在传热流体(例如:水、乙烯、乙二醇等)中时,其传热能力会得到提升,因为大多数固体材料的热导率要大于液体,因此由颗粒、流体组成的混合物热导率也高于液体本身的热导率,由此制成的流体,我们称之为纳米流体。金属冷管的液体工质蒸散量几乎为0,而柔软材质的管道则会产生液体的蒸散,在封闭式循环系统中,为了弥补液体工质的蒸散,必须定期在系统中补充液体工质。——我们之前说过,材料的导电和导热的机制大致是类似的,所以导电能力更强的金属往往具有更好的导热能力。

制冷技术咨询与服务的博客 2036

Nginx源码分析 - 基础数据结构篇 - 字符串结构 ngx_string.c(08)

目录 一、数据结构定义 1. ngx_str_t 字符串结构 2. ngx_keyval_t 字符串K V结构 一、数据结构图 三、具体函数实现 1. 初始化一个字符串 ngx_string 2. 设置字符串 Nginx的ngx_str_t字符串结构非常简单和好用。 nxg_string.c文件中包含了很多常用的字符串操作方法,具体我们就不讲解了,主要简单来看下Nginx的字符串数据结构一、数据结构定义 1. ngx_str_t 字符串结构 /** * 字符串结构 */ typ.

alpha_love的博客 681

解决Android 14兼容性问题:NDK中arm64-v8a的正确配置方法

本文详细解析Android 14系统架构变化对NDK开发的影响,重点介绍arm64-v8a架构的正确配置方法。针对常见的兼容性问题如so库缺失、ABI不匹配等提供解决方案,并分享性能优化与自动化测试实践,助力开发者高效适配Android 14设备。

algae的博客 1221

Nginx-string解析

我们先看看ngx_string中定义的几个数据结构 typedef struct { size_t len; u_char *data; } ngx_str_t; 这个结构体就是最基础的nginx中的字符串结构了,其中 len表示这个字符串的长度, *data是一个指向无符号char类型的指针。 从这个结构体可以看出,后续关于字符串长度的操作strl

whatever you do - just have fun! 1835

别再手动调参了!用MATLAB+改进PSO算法,5步搞定机械臂轨迹优化(附完整代码)

本文介绍如何利用MATLAB和改进PSO算法快速优化机械臂轨迹规划,仅需5步即可完成传统耗时的手动调参过程。通过混沌初始化、自适应权重等创新方法,改进PSO算法显著提升优化效率,实现全局最优解搜索,适用于工业自动化中的机械臂控制。文章包含完整MATLAB代码实现,帮助工程师轻松应用于实际生产场景。

weixin_29232121的博客 354

《UVM实战》学习笔记——第三章UVM基础

uvm基础,常见的派生类,config db机制,打印信息等

qq_42135020的博客 5176

ngx_string.c

/* * Copyright (C) Igor Sysoev */ #include #include static u_char *ngx_sprintf_num(u_char *buf, u_char *last, uint64_t ui64, u_char zero, ngx_uint_t hexadecimal, ngx_uint_t width); static

tianmo2010的专栏 1992

汽车诊断之UDS入门-0x19 0x0A服务

0x19 0x0A解析

weixin_44842720的博客 3836

nginx string 函数说明文档

ngx_string.h提供了一些操作字符串的函数,现总结如下: #define ngx_string(str)     { sizeof(str) - 1, (u_char *) str }  把以\0结束的字符串转换为ngx_str_t类型 #define ngx_null_string     { 0, NULL } 可以把一个ngx_str_t类型的变量赋为

扎实基础方能走远 1973

CVE-2021-3156本地提权漏洞复现

受影响版本 sudo: 1.8.2 - 1.8.31p2 sudo: 1.9.0 - 1.9.5p1 测试 我这里是在本地centos7上进行测试。 需要目标机器上存在python编译器、目标主机出网或者能上传文件到目标主机。 以非root用户登录系统,并运行如下命令: sudoedit -s / 通常响应一个以 sudoedit: / 开头的报错,多半存在漏洞。 利用 提权脚本: https://www.o2oxy.cn/wp-content/uploa

The current road is different, love needs to distinguish between right and wrong 3779

基于simulink的电气弹簧ES稳压控制模型仿真

若要补偿母线电压的谐波,需控制ES上的谐波,即在单闭环母线电压有效值控制的基础上,增加谐波抑制环节来进行谐波控制,现有的各种检测和抑制谐波的方法有采用模拟滤波器、傅里叶分析进行谐波分析、基于瞬时无功功率理论的方法等。当关键负载ZC为电流源型非线性负载时,电路原理图如图7所示,由于电流源型非线性负载可以等效为谐波电流源,关键负载电流ic便会含有谐波分量,导致输电线电流is和母线电压VS同样会含有谐波分量,导致供电质量的严重下降,对用电设备的正常工作造成影响。分别为流过线路阻抗、非关键负载、关键负载的电流,

FPGA/MATLAB学习教程/源码/项目合作开发 1632

全网最强Nginx教程 | 万字长文爆肝Nginx(五)

本文介绍了使用Nginx实现服务器端集群搭建的方法,主要包括两部分内容: Nginx与Tomcat部署:通过配置Nginx反向代理,将用户请求转发到Tomcat服务器处理。演示了Tomcat环境准备、web项目部署以及Nginx配置实现请求转发的完整流程。 Nginx实现动静分离:将静态资源(HTML、JS、CSS等)交由Nginx直接处理,动态请求转发给Tomcat,降低服务器压力并提高访问速度。详细说明了目录结构设置和Nginx配置方法。 Tomcat集群搭建:通过部署多台Tomcat服务器,利用Ngi

qq_45832461的博客 1088

手把手教你学Simulink实例:基于Simulink的超级电容器充放电仿真

超级电容器(Supercapacitor)是一种高容量电容器,具有快速充放电能力、长寿命和高功率密度等优点。它在能量存储系统、电动汽车、不间断电源(UPS)等领域有广泛应用。为了更好地理解和设计超级电容器的应用系统,通常需要进行详细的仿真分析。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证超级电容器充放电系统的控制策略。本教程将详细介绍如何使用 Simulink 进行超级电容器充放电的仿真实例。通过本教程,我们详细介绍了如何使用 Simulink 进行超级电容器充放电的仿真实例。

MHD0815的博客 581

nginx 源码学习笔记(六)

简单的数据类型 在core/ngx_confing.h中定义了基本的数据类型的映射,大部分都映射到c语言自身的数据类型: typedef intptr_t        ngx_int_t; typedef uintptr_t       ngx_uint_t; typedef intptr_t        ngx_flag_t; 其中ngx_int_t,ngx_flag_t都映射为i

SmartMZ Log 3638

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

nginx源码学习_数据结构(ngx_str_t)

nginx中关于字符串的数据结构位于src/core/ngx_string.c和src/core/ngx_string.h中 先来看一下数据结构: 1 typedef struct { 2 size_t len; 3 u_char *data; 4 } ngx_str_t; data指针指向字符串起始地址,len表示字符串的有效长度。这里面的d...

weixin_30790841的博客 104

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

从源码到部署:Heroku-buildpack-static工作原理深度剖析

Heroku-buildpack-static是一款用于处理静态网站和单页Web应用的构建包,尽管已被官方标记为 deprecated,但了解其工作原理对于掌握静态资源部署流程仍具有重要价值。本文将从源码结构出发,详细解析其从配置解析到Nginx部署的完整工作流程,帮助开发者深入理解静态应用的自动化部署机制。 ## 核心功能与项目结构概览 Heroku-buildpack-static的核心价

gitblog_02425的博客 445

OpenResty高性能Web平台:从Nginx到动态网关的架构与实战

在构建高性能Web服务时,事件驱动和非阻塞I/O模型是处理高并发请求的基石技术。Nginx正是基于此模型,通过Master-Worker进程架构和高效的事件循环机制,实现了C10K甚至C100K级别的连接处理能力,为上层应用提供了稳定、低耗的高性能保障。为了在保持高性能的同时,赋予系统动态扩展业务逻辑的灵活性,OpenResty创新性地将LuaJIT即时编译器与Nginx深度集成。LuaJIT能将Lua脚本实时编译为接近C语言效率的本地机器码,使得开发者能以脚本语言的开发效率,获得近乎原生代码的执行性能。这

diaoju3333的博客 458

nginx 源码学习笔记(六)——nginx基本数据结构

简单的数据类型 在core/ngx_confing.h中定义了基本的数据类型的映射,大部分都映射到c语言自身的数据类型: typedef intptr_t ngx_int_t; typedef uintptr_t ngx_uint_t; typedef intptr_t ngx_flag_t; 其中ngx_int_t,ngx_flag_t都映射为intptr_t;ngx_uint_t映射...

管子(zero)的杂乱空间 131

Nginx C++模块开发实战:从C语言扩展到现代C++业务集成

在Web服务器和高性能中间件开发领域,模块化架构是提升系统灵活性和可扩展性的核心设计模式。Nginx作为业界领先的高并发Web服务器,其纯C语言编写的核心模块提供了卓越的性能和稳定性,但面对复杂的业务逻辑集成时,C语言的开发效率与资源管理能力面临挑战。通过引入C++语言扩展Nginx模块,开发者可以在保持Nginx高效事件驱动框架的同时,利用C++的面向对象特性、RAII(资源获取即初始化)机制以及丰富的STL标准库,显著提升复杂业务逻辑的开发效率和代码可维护性。这种混合编程模式的核心技术价值在于,它允许将

weixin_30338497的博客 411

【Web服务器】CVE-2026-42945:Nginx “Rift“ 漏洞深度解析与紧急修复指南

2026年5月,安全研究机构 depthfirst 披露了潜伏18年的 Nginx 高危漏洞 CVE-2026-42945(别名 NGINX Rift),CVSS 评分高达 9.2。该堆缓冲区溢出漏洞影响 Nginx 0.6.27 至 1.30.0 全系列版本,全球约 570 万台服务器面临威胁,中国受影响网站超 254 万。本文深度剖析漏洞原理、攻击链路、影响范围,提供完整的修复方案、临时缓解措施和生产环境最佳实践,帮助运维团队快速应对这场全网级安全危机。

腾讯云创作之星、华为云云享专家,深耕电商全栈高并发系统实战,分享可商用商城项目源码。 1404
上一篇: ngnix 源代码学习(1)
下一篇: Ngnix 源码学习(3)----内存池结构
ctreewang
博客等级 码龄16年 1608粉丝 276原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值