nginx源码学习

//一般是管理一个已经连接好的tcp连接,作为服务的时候保持的是一个被动连接(也就是accpet出来的),可以作为客户端的连接(作反向代理的时候,作为客户端主动去连上游(upsream)或者源站服务器)。
struct ngx_connection_s {
    void               *data;//如果是http协议的话,该指针指向类型为ngx_http_connection_t的结构体
    ngx_event_t        *read;//socket读事件通知函数,其中它的成员data指向的就是跟它关联的ngx_connection_t,对于监听socket则监听处理函数为ngx_event_accept,对于客户端是用http连接过来的,处理函数指向ngx_http_wait_request_handler,对于keepalive保存下来的连接,该事件的处理函数为ngx_http_wait_request_handler,而且在请求不同的阶段,事件通知函数会动态变化
    ngx_event_t        *write;//socket写事件通知函数,其中它的成员data指向的就是跟它关联的ngx_connection_t

    ngx_socket_t        fd;//socket的文件描述符

    ngx_recv_pt         recv;//从网络接收数据的函数,一次只能接收到一个缓冲区,该函数封装了不同的平台接收函数,以及屏蔽了底层协议的依赖。windows和linux都有实现自己不同的收数据方式。同时如果要支持https,也是通过修改该函数的实现来完成的。
    ngx_send_pt         send;//将数据发送到网络的函数,一次只能发送一个缓冲区的数据,该函数封装了不同的平台接收函数,以及屏蔽了底层协议的依赖。windows和linux都有实现自己不同的收数据方式。同时如果要支持https,也是通过修改该函数的实现来完成的。
    ngx_recv_chain_pt   recv_chain;//从网络接收数据的函数,能够将接手数据写到多个不连续的缓冲区,该函数封装了不同的平台接收函数,以及屏蔽了底层协议的依赖。windows和linux都有实现自己不同的收数据方式。同时如果要支持https,也是通过修改该函数的实现来完成的。
    ngx_send_chain_pt   send_chain;//将数据发送到网络的函数,一次能够发送多个不连续缓冲区的数据,该函数封装了不同的平台接收函数,以及屏蔽了底层协议的依赖。windows和linux都有实现自己不同的收数据方式。同时如果要支持https,也是通过修改该函数的实现来完成的。

    ngx_listening_t    *listening;//与该connection相关的监听信息,这个信息是从监听connection传递给接收到哦connection的。

    off_t               sent;

    ngx_log_t          *log;

    ngx_pool_t         *pool;

    int                 type;

    struct sockaddr    *sockaddr;
    socklen_t           socklen;
    ngx_str_t           addr_text;

    ngx_str_t           proxy_protocol_addr;

#if (NGX_SSL)
    ngx_ssl_connection_t  *ssl;
#endif

    struct sockaddr    *local_sockaddr;
    socklen_t           local_socklen;

    ngx_buf_t          *buffer;

    ngx_queue_t         queue;

    ngx_atomic_uint_t   number;

    ngx_uint_t          requests;

    unsigned            buffered:8;

    unsigned            log_error:3;     /* ngx_connection_log_error_e */

    unsigned            unexpected_eof:1;
    unsigned            timedout:1;
    unsigned            error:1;
    unsigned            destroyed:1;

    unsigned            idle:1;
    unsigned            reusable:1;
    unsigned            close:1;
    unsigned            shared:1;

    unsigned            sendfile:1;
    unsigned            sndlowat:1;
    unsigned            tcp_nodelay:2;   /* ngx_connection_tcp_nodelay_e */
    unsigned            tcp_nopush:2;    /* ngx_connection_tcp_nopush_e */

    unsigned            need_last_buf:1;

#if (NGX_HAVE_IOCP)
    unsigned            accept_context_updated:1;
#endif

#if (NGX_HAVE_AIO_SENDFILE)
    unsigned            busy_count:2;
#endif

#if (NGX_THREADS)
    ngx_thread_task_t  *sendfile_task;
#endif
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值