view src/mysql/ngx_mysql.h @ 6250:0256738454dc

Increased the default number of output buffers. Since an output buffer can only be used for either reading or sending, small amounts of data left from the previous operation (due to some limits) must be sent before nginx will be able to read further into the buffer. Using only one output buffer can result in suboptimal behavior that manifests itself in forming and sending too small chunks of data. This is particularly painful with SPDY (or HTTP/2) where each such chunk needs to be prefixed with some header. The default flow-control window in HTTP/2 is 64k minus one bytes. With one 32k output buffer this results is one byte left after exhausting the window. With two 32k buffers the data will be read into the second free buffer before sending, thus the minimum output is increased to 32k + 1 bytes which is much better.
author Valentin Bartenev <vbart@nginx.com>
date Tue, 15 Sep 2015 17:49:15 +0300
parents d620f497c50f
children
line wrap: on
line source


/*
 * Copyright (C) Igor Sysoev
 * Copyright (C) Nginx, Inc.
 */


#ifndef _NGX_MYSQL_H_INCLUDED_
#define _NGX_MYSQL_H_INCLUDED_


#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_event.h>
#include <ngx_event_connect.h>


typedef struct ngx_mysql_s  ngx_mysql_t;

typedef void (*ngx_mysql_handler_pt)(ngx_mysql_t *m);


struct ngx_mysql_s {
    ngx_peer_connection_t   peer;

    ngx_buf_t              *buf;
    ngx_pool_t             *pool;

    ngx_str_t              *login;
    ngx_str_t              *passwd;
    ngx_str_t              *database;

    ngx_str_t               query;

    ngx_uint_t              pktn;

    ngx_mysql_handler_pt    handler;
    void                   *data;
    ngx_int_t               state;

};


#define NGX_MYSQL_CMDPKT_LEN  5


#if (NGX_HAVE_LITTLE_ENDIAN && NGX_HAVE_NONALIGNED && 0)

#define ngx_m16toh(n)      (*(uint32_t *) n & 0x0000ffff)
#define ngx_m24toh(n)      (*(uint32_t *) n & 0x00ffffff)
#define ngx_m32toh(n)      *(uint32_t *) n

#define ngx_htom16(n, m)   *(uint16_t *) n = (uint16_t) ((m) & 0xffff)

#define ngx_htom24(n, m)   (n)[0] = (u_char) ((m) & 0xff);                   \
                           (n)[1] = (u_char) (((m) >> 8) & 0xff);            \
                           (n)[2] = (u_char) (((m) >> 16) & 0xff)

#define ngx_htom32(n, m)   *(uint32_t *) (n) = (m)

#else

#define ngx_m16toh(n)      (n[0] | n[1] << 8)
#define ngx_m24toh(n)      (n[0] | n[1] << 8 | n[2] << 16)
#define ngx_m32toh(n)      (n[0] | n[1] << 8 | n[2] << 16 | n[3] << 24)

#define ngx_htom16(n, m)   (n)[0] = (u_char) (m); (n)[1] = (u_char) ((m) >> 8)

#define ngx_htom24(n, m)   (n)[0] = (u_char) ((m) & 0xff);                   \
                           (n)[1] = (u_char) (((m) >> 8) & 0xff);            \
                           (n)[2] = (u_char) (((m) >> 16) & 0xff)

#define ngx_htom32(n, m)   (n)[0] = (u_char) ((m) & 0xff);                   \
                           (n)[1] = (u_char) (((m) >> 8) & 0xff);            \
                           (n)[2] = (u_char) (((m) >> 16) & 0xff);           \
                           (n)[3] = (u_char) (((m) >> 24) & 0xff)

#endif


ngx_int_t ngx_mysql_connect(ngx_mysql_t *m);
ngx_int_t ngx_mysql_query(ngx_mysql_t *m);


#endif /* _NGX_MYSQL_H_INCLUDED_ */