Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
nginxƽ̨³õ̽(ÏÂ)
 
À´Ô´£ºtengine ·¢²¼ÓÚ£º 2015-04-13
  2274  次浏览      29
 

ngx_pool_t(100%)

ngx_pool_tÊÇÒ»¸ö·Ç³£ÖØÒªµÄÊý¾Ý½á¹¹£¬ÔںܶàÖØÒªµÄ³¡ºÏ¶¼ÓÐʹÓ㬺ܶàÖØÒªµÄÊý¾Ý½á¹¹Ò²¶¼ÔÚʹÓÃËü¡£ÄÇôËü¾¿¾¹ÊÇÒ»¸öʲô¶«Î÷ÄØ£¿¼òµ¥µÄ˵£¬ËüÌṩÁËÒ»ÖÖ»úÖÆ£¬°ïÖú¹ÜÀíһϵÁеÄ×ÊÔ´£¨ÈçÄڴ棬ÎļþµÈ£©£¬Ê¹µÃ¶ÔÕâЩ×ÊÔ´µÄʹÓúÍÊÍ·Åͳһ½øÐУ¬Ãâ³ýÁËʹÓùý³ÌÖп¼Âǵ½¶Ô¸÷ÖÖ¸÷Ñù×ÊÔ´µÄʲôʱºòÊÍ·Å£¬ÊÇ·ñÒÅ©ÁËÊͷŵĵ£ÐÄ¡£

ÀýÈç¶ÔÓÚÄÚ´æµÄ¹ÜÀí£¬Èç¹ûÎÒÃÇÐèҪʹÓÃÄڴ棬ÄÇô×ÜÊÇ´ÓÒ»¸öngx_pool_tµÄ¶ÔÏóÖлñÈ¡Äڴ棬ÔÚ×îÖÕµÄij¸öʱ¿Ì£¬ÎÒÃÇÏú»ÙÕâ¸öngx_pool_t¶ÔÏó£¬ËùÓÐÕâЩÄÚ´æ¶¼±»ÊÍ·ÅÁË¡£ÕâÑùÎÒÃǾͲ»±ØÒª¶Ô¶ÔÕâЩÄÚ´æ½øÐÐmallocºÍfreeµÄ²Ù×÷£¬²»Óõ£ÐÄÊÇ·ñij¿é±»malloc³öÀ´µÄÄÚ´æÃ»Óб»ÊÍ·Å¡£ÒòΪµ±ngx_pool_t¶ÔÏó±»Ïú»ÙµÄʱºò£¬ËùÓдÓÕâ¸ö¶ÔÏóÖзÖÅä³öÀ´µÄÄÚ´æ¶¼»á±»Í³Ò»Êͷŵô¡£

ÔÙ±ÈÈçÎÒÃÇҪʹÓÃһϵÁеÄÎļþ£¬µ«ÊÇÎÒÃÇ´ò¿ªÒÔºó£¬×îÖÕÐèÒª¶¼¹Ø±Õ£¬ÄÇôÎÒÃǾͰÑÕâЩÎļþͳһµÇ¼Çµ½Ò»¸öngx_pool_t¶ÔÏóÖУ¬µ±Õâ¸öngx_pool_t¶ÔÏó±»Ïú»ÙµÄʱºò£¬ËùÓÐÕâЩÎļþ¶¼½«»á±»¹Ø±Õ¡£

´ÓÉÏÃæ¾ÙµÄÁ½¸öÀý×ÓÖÐÎÒÃÇ¿ÉÒÔ¿´³ö£¬Ê¹ÓÃngx_pool_tÕâ¸öÊý¾Ý½á¹¹µÄʱºò£¬ËùÓеÄ×ÊÔ´µÄÊͷŶ¼ÔÚÕâ¸ö¶ÔÏó±»Ïú»ÙµÄʱ¿Ì£¬Í³Ò»½øÐÐÁËÊÍ·Å£¬ÄÇô¾Í»á´øÀ´Ò»¸öÎÊÌ⣬¾ÍÊÇÕâЩ×ÊÔ´µÄÉú´æÖÜÆÚ£¨»òÕß˵±»Õ¼ÓõÄʱ¼ä£©ÊǸúngx_pool_tµÄÉú´æÖÜÆÚ»ù±¾Ò»Ö£¨ngx_pool_tÒ²ÌṩÁËÉÙÁ¿²Ù×÷¿ÉÒÔÌáǰÊÍ·Å×ÊÔ´£©¡£´Ó×î¸ßЧµÄ½Ç¶ÈÀ´Ëµ£¬Õâ²¢²»ÊÇ×îºÃµÄ¡£±ÈÈ磬ÎÒÃÇÐèÒªÒÀ´ÎʹÓÃA£¬B£¬CÈý¸ö×ÊÔ´£¬ÇÒʹÓÃÍêBµÄʱºò£¬A¾Í²»»áÔÙ±»Ê¹ÓÃÁË£¬Ê¹ÓÃCµÄʱºòAºÍB¶¼²»»á±»Ê¹Óõ½¡£Èç¹û²»Ê¹ÓÃngx_pool_tÀ´¹ÜÀíÕâÈý¸ö×ÊÔ´£¬ÄÇÎÒÃÇ¿ÉÄÜ´ÓϵͳÀïÃæÉêÇëA£¬Ê¹ÓÃA£¬È»ºóÔÚÊÍ·ÅA¡£½Ó×ÅÉêÇëB£¬Ê¹ÓÃB£¬ÔÙÊÍ·ÅB¡£×îºóÉêÇëC£¬Ê¹ÓÃC£¬È»ºóÊÍ·ÅC¡£µ«Êǵ±ÎÒÃÇʹÓÃÒ»¸öngx_pool_t¶ÔÏóÀ´¹ÜÀíÕâÈý¸ö×ÊÔ´µÄʱºò£¬A£¬BºÍCµÄÊÍ·ÅÊÇÔÚ×îºóÒ»Æð·¢ÉúµÄ£¬Ò²¾ÍÊÇÔÚʹÓÃÍêCÒÔºó¡£³ÏÈ»£¬ÕâÔڿ͹ÛÉÏÔö¼ÓÁ˳ÌÐòÔÚÒ»¶Îʱ¼äµÄ×ÊԴʹÓÃÁ¿¡£µ«ÊÇÕâÒ²¼õÇáÁ˳ÌÐòÔ±·Ö±ð¹ÜÀíÈý¸ö×ÊÔ´µÄÉúÃüÖÜÆÚµÄ¹¤×÷¡£ÕâÒ²¾ÍÊÇÓÐËùµÃ£¬±ØÓÐËùʧµÄµÀÀí¡£Êµ¼ÊÉÏÊÇÒ»¸öÈ¡ÉáµÄÎÊÌ⣬Ҫ¿´ÔÚ¾ßÌåµÄÇé¿öÏ£¬Äã¸üÔÚºõµÄÊÇÄĸö¡£

¿ÉÒÔ¿´Ò»ÏÂÔÚnginxÀïÃæÒ»¸öµäÐ͵ÄʹÓÃngx_pool_tµÄ³¡¾°£¬¶ÔÓÚnginx´¦ÀíµÄÿ¸öhttp request, nginx»áÉú³ÉÒ»¸öngx_pool_t¶ÔÏóÓëÕâ¸öhttp request¹ØÁª£¬ËùÓд¦Àí¹ý³ÌÖÐÐèÒªÉêÇëµÄ×ÊÔ´¶¼´ÓÕâ¸öngx_pool_t¶ÔÏóÖлñÈ¡£¬µ±Õâ¸öhttp request´¦ÀíÍê³ÉÒÔºó£¬ËùÓÐÔÚ´¦Àí¹ý³ÌÖÐÉêÇëµÄ×ÊÔ´£¬¶¼½«Ëæ×ÅÕâ¸ö¹ØÁªµÄngx_pool_t¶ÔÏóµÄÏú»Ù¶øÊÍ·Å¡£

ngx_pool_tÏà¹Ø½á¹¹¼°²Ù×÷±»¶¨ÒåÔÚÎļþsrc/core/ngx_palloc.h|cÖС£

typedef struct ngx_pool_s        ngx_pool_t;
struct ngx_pool_s {
ngx_pool_data_t d;
size_t max;
ngx_pool_t *current;
ngx_chain_t *chain;
ngx_pool_large_t *large;
ngx_pool_cleanup_t *cleanup;
ngx_log_t *log;
};

´Óngx_pool_tµÄÒ»°ãʹÓÃÕߵĽǶÈÀ´Ëµ£¬¿É²»ÓùØ×¢ngx_pool_t½á¹¹Öи÷×Ö¶Î×÷Óá£ËùÒÔÕâÀïÒ²²»»á½øÐÐÏêϸµÄ½âÊÍ£¬µ±È»ÔÚ˵Ã÷ijЩ²Ù×÷º¯ÊýµÄʹÓõÄʱºò£¬ÈçÓбØÒª£¬»á½øÐÐ˵Ã÷¡£

ÏÂÃæÎÒÃÇÀ´·Ö±ð½âÊÍÏÂngx_pool_tµÄÏà¹Ø²Ù×÷¡£

ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log);

´´½¨Ò»¸ö³õʼ½Úµã´óСΪsizeµÄpool£¬logΪºóÐøÔÚ¸ÃpoolÉϽøÐвÙ×÷ʱÊä³öÈÕÖ¾µÄ¶ÔÏó¡£ ÐèҪ˵Ã÷µÄÊÇsizeµÄÑ¡Ôñ£¬sizeµÄ´óС±ØÐëСÓÚµÈÓÚNGX_MAX_ALLOC_FROM_POOL£¬ÇÒ±ØÐë´óÓÚsizeof(ngx_pool_t)¡£

Ñ¡Ôñ´óÓÚNGX_MAX_ALLOC_FROM_POOLµÄÖµ»áÔì³ÉÀË·Ñ£¬ÒòΪ´óÓÚ¸ÃÏÞÖÆµÄ¿Õ¼ä²»»á±»Óõ½£¨Ö»ÊÇ˵ÔÚµÚÒ»¸öÓÉngx_pool_t¶ÔÏó¹ÜÀíµÄÄÚ´æ¿éÉϵÄÄڴ棬ºóÐøµÄ·ÖÅäÈç¹ûµÚÒ»¸öÄÚ´æ¿éÉϵĿÕÏв¿·ÖÒÑÓÃÍ꣬»áÔÙ·ÖÅäµÄ£©¡£

Ñ¡ÔñСÓÚsizeof(ngx_pool_t)µÄÖµ»áÔì³É³ÌÐò±ÀÀ£¡£ÓÉÓÚ³õʼ´óСµÄÄÚ´æ¿éÖÐÒªÓÃÒ»²¿·ÖÀ´´æ´¢ngx_pool_tÕâ¸öÐÅÏ¢±¾Éí¡£

µ±Ò»¸öngx_pool_t¶ÔÏó±»´´½¨ÒԺ󣬸öÔÏóµÄmax×ֶα»¸³ÖµÎªsize-sizeof(ngx_pool_t)ºÍNGX_MAX_ALLOC_FROM_POOLÕâÁ½ÕßÖбȽÏСµÄ¡£ºóÐøµÄ´ÓÕâ¸öpoolÖзÖÅäµÄÄÚ´æ¿é£¬ÔÚµÚÒ»¿éÄÚ´æÊ¹ÓÃÍê³ÉÒÔºó£¬Èç¹ûÒª¼ÌÐø·ÖÅäµÄ»°£¬¾ÍÐèÒª¼ÌÐø´Ó²Ù×÷ϵͳÉêÇëÄÚ´æ¡£µ±ÄÚ´æµÄ´óССÓÚµÈÓÚmax×ֶεÄʱºò£¬Ôò·ÖÅäеÄÄÚ´æ¿é£¬Á´½ÓÔÚdÕâ¸ö×ֶΣ¨Êµ¼ÊÉÏÊÇd.next×ֶΣ©¹ÜÀíµÄÒ»ÌõÁ´±íÉÏ¡£µ±Òª·ÖÅäµÄÄÚ´æ¿éÊDZÈmax´óµÄ£¬ÄÇô´ÓϵͳÖÐÉêÇëµÄÄÚ´æÊDZ»¹Ò½ÓÔÚlarge×ֶιÜÀíµÄÒ»ÌõÁ´±íÉÏ¡£ÎÒÃÇÔÝÇÒ°ÑÕâ¸ö³ÆÖ®Îª´ó¿éÄÚ´æÁ´ºÍС¿éÄÚ´æÁ´¡£

void *ngx_palloc(ngx_pool_t *pool, size_t size);

´ÓÕâ¸öpoolÖзÖÅäÒ»¿éΪsize´óСµÄÄÚ´æ¡£×¢Ò⣬´Ëº¯Êý·ÖÅäµÄÄÚ´æµÄÆðʼµØÖ·°´ÕÕNGX_ALIGNMENT½øÐÐÁË¶ÔÆë¡£¶ÔÆë²Ù×÷»áÌá¸ßϵͳ´¦ÀíµÄËÙ¶È£¬µ«»áÔì³ÉÉÙÁ¿ÄÚ´æµÄÀË·Ñ¡£

void *ngx_pnalloc(ngx_pool_t *pool, size_t size);

´ÓÕâ¸öpoolÖзÖÅäÒ»¿éΪsize´óСµÄÄÚ´æ¡£µ«ÊǴ˺¯Êý·ÖÅäµÄÄڴ沢ûÓÐÏñÉÏÃæµÄº¯ÊýÄÇÑù½øÐйý¶ÔÆë¡£

void *ngx_pcalloc(ngx_pool_t *pool, size_t size);

¸Ãº¯ÊýÒ²ÊÇ·ÖÅäsize´óСµÄÄڴ棬²¢ÇÒ¶Ô·ÖÅäµÄÄÚ´æ¿é½øÐÐÁËÇåÁã¡£ÄÚ²¿Êµ¼ÊÉÏÊÇתµ÷ÓÃngx_pallocʵÏֵġ£

void *ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment);

°´ÕÕÖ¸¶¨¶ÔÆë´óСalignmentÀ´ÉêÇëÒ»¿é´óСΪsizeµÄÄÚ´æ¡£´Ë´¦»ñÈ¡µÄÄÚ´æ²»¹Ü´óС¶¼½«±»ÖÃÓÚ´óÄÚ´æ¿éÁ´ÖйÜÀí¡£

ngx_int_t ngx_pfree(ngx_pool_t *pool, void *p);

¶ÔÓÚ±»ÖÃÓÚ´ó¿éÄÚ´æÁ´£¬Ò²¾ÍÊDZ»large×ֶιÜÀíµÄÒ»ÁÐÄÚ´æÖеÄij¿é½øÐÐÊÍ·Å¡£¸Ãº¯ÊýµÄʵÏÖÊÇ˳Ðò±éÀúlarge¹ÜÀíµÄ´ó¿éÄÚ´æÁ´±í¡£ËùÒÔЧÂʱȽϵÍÏ¡£Èç¹ûÔÚÕâ¸öÁ´±íÖÐÕÒµ½ÁËÕâ¿éÄڴ棬ÔòÊÍ·Å£¬²¢·µ»ØNGX_OK¡£·ñÔò·µ»ØNGX_DECLINED¡£

ÓÉÓÚÕâ¸ö²Ù×÷ЧÂʱȽϵÍÏ£¬³ý·Ç±ØÒª£¬Ò²¾ÍÊÇ˵Õâ¿éÄÚ´æ·Ç³£´ó£¬È·Ó¦¼°Ê±ÊÍ·Å£¬·ñÔòÒ»°ã²»ÐèÒªµ÷Ó᣷´ÕýÄÚ´æÔÚÕâ¸öpool±»Ïú»ÙµÄʱºò£¬×ܹé»á¶¼ÊͷŵôµÄÂ

ngx_pool_cleanup_t *ngx_pool_cleanup_add(ngx_pool_t *p, size_t size);

ngx_pool_tÖеÄcleanup×ֶιÜÀí×ÅÒ»¸öÌØÊâµÄÁ´±í£¬¸ÃÁ´±íµÄÿһÏî¶¼¼Ç¼×ÅÒ»¸öÌØÊâµÄÐèÒªÊͷŵÄ×ÊÔ´¡£¶ÔÓÚÕâ¸öÁ´±íÖÐÿ¸ö½ÚµãËù°üº¬µÄ×ÊÔ´ÈçºÎÈ¥ÊÍ·Å£¬ÊÇ×Ô˵Ã÷µÄ¡£ÕâÒ²¾ÍÌṩÁ˷dz£´óµÄÁé»îÐÔ¡£Òâζ×Å£¬ngx_pool_t²»½ö½ö¿ÉÒÔ¹ÜÀíÄڴ棬ͨ¹ýÕâ¸ö»úÖÆ£¬Ò²¿ÉÒÔ¹ÜÀíÈκÎÐèÒªÊͷŵÄ×ÊÔ´£¬ÀýÈ磬¹Ø±ÕÎļþ£¬»òÕßɾ³ýÎļþµÈµÈ¡£ÏÂÃæÎÒÃÇ¿´Ò»ÏÂÕâ¸öÁ´±íÿ¸ö½ÚµãµÄÀàÐÍ:

typedef struct ngx_pool_cleanup_s  ngx_pool_cleanup_t;
typedef void (*ngx_pool_cleanup_pt)(void *data);

struct ngx_pool_cleanup_s {
ngx_pool_cleanup_pt handler;
void *data;
ngx_pool_cleanup_t *next;
};

data: Ö¸Ã÷Á˸ýڵãËù¶ÔÓ¦µÄ×ÊÔ´¡£

handler: ÊÇÒ»¸öº¯ÊýÖ¸Õ룬ָÏòÒ»¸ö¿ÉÒÔÊÍ·ÅdataËù¶ÔÓ¦×ÊÔ´µÄº¯Êý¡£¸Ãº¯ÊýÖ»ÓÐÒ»¸ö²ÎÊý£¬¾ÍÊÇdata¡£

next: Ö¸Ïò¸ÃÁ´±íÖÐÏÂÒ»¸öÔªËØ¡£

¿´µ½ÕâÀngx_pool_cleanup_addÕâ¸öº¯ÊýµÄÓ÷¨£¬ÎÒÏàÐÅ´ó¼Ò¶¼Ó¦¸ÃÓÐһЩÃ÷°×ÁË¡£µ«ÊÇÕâ¸ö²ÎÊýsizeÊÇÆðʲô×÷ÓõÄÄØ£¿Õâ¸ö size¾ÍÊÇÒª´æ´¢Õâ¸ödata×Ö¶ÎËùÖ¸ÏòµÄ×ÊÔ´µÄ´óС£¬¸Ãº¯Êý»áΪdata·ÖÅäsize´óСµÄ¿Õ¼ä¡£

±ÈÈçÎÒÃÇÐèÒª×îºóɾ³ýÒ»¸öÎļþ¡£ÄÇÎÒÃÇÔÚµ÷ÓÃÕâ¸öº¯ÊýµÄʱºò£¬°ÑsizeÖ¸¶¨Îª´æ´¢ÎļþÃûµÄ×Ö·û´®µÄ´óС£¬È»ºóµ÷ÓÃÕâ¸öº¯Êý¸øcleanupÁ´±íÖÐÔö¼ÓÒ»Ïî¡£¸Ãº¯Êý»á·µ»ØÐÂÌí¼ÓµÄÕâ¸ö½Úµã¡£ÎÒÃÇÈ»ºó°ÑÕâ¸ö½ÚµãÖеÄdata×ֶο½±´ÎªÎļþÃû¡£°Ñhander×ֶθ³ÖµÎªÒ»¸öɾ³ýÎļþµÄº¯Êý£¨µ±È»¸Ãº¯ÊýµÄÔ­ÐÍÒª°´ÕÕvoid (*ngx_pool_cleanup_pt)(void *data)£©¡£

void ngx_destroy_pool(ngx_pool_t *pool);

¸Ãº¯Êý¾ÍÊÇÊÍ·ÅpoolÖгÖÓеÄËùÓÐÄڴ棬ÒÔ¼°ÒÀ´Îµ÷ÓÃcleanup×Ö¶ÎËù¹ÜÀíµÄÁ´±íÖÐÿ¸öÔªËØµÄhandler×Ö¶ÎËùÖ¸ÏòµÄº¯Êý£¬À´ÊͷŵôËùÓиÃpool¹ÜÀíµÄ×ÊÔ´¡£²¢ÇÒ°ÑpoolÖ¸ÏòµÄngx_pool_tÒ²ÊͷŵôÁË£¬ÍêÈ«²»¿ÉÓÃÁË¡£

void ngx_reset_pool(ngx_pool_t *pool);

¸Ãº¯ÊýÊÍ·ÅpoolÖÐËùÓдó¿éÄÚ´æÁ´±íÉϵÄÄڴ棬С¿éÄÚ´æÁ´ÉϵÄÄÚ´æ¿é¶¼ÐÞ¸ÄΪ¿ÉÓᣵ«ÊDz»»áÈ¥´¦ÀícleanupÁ´±íÉϵÄÏîÄ¿¡£

ngx_array_t(100%)

ngx_array_tÊÇnginxÄÚ²¿Ê¹ÓõÄÊý×é½á¹¹¡£nginxµÄÊý×é½á¹¹ÔÚ´æ´¢ÉÏÓë´ó¼ÒÈÏÖªµÄCÓïÑÔÄÚÖõÄÊý×éÓÐÏàËÆÐÔ£¬±ÈÈçʵ¼ÊÉÏ´æ´¢Êý¾ÝµÄÇøÓòÒ²ÊÇÒ»´ó¿éÁ¬ÐøµÄÄÚ´æ¡£µ«ÊÇÊý×é³ýÁË´æ´¢Êý¾ÝµÄÄÚ´æÒÔÍ⻹°üº¬Ò»Ð©ÔªÐÅÏ¢À´ÃèÊöÏà¹ØµÄһЩÐÅÏ¢¡£ÏÂÃæÎÒÃÇ´ÓÊý×éµÄ¶¨ÒåÉÏÀ´ÏêϸµÄÁ˽âһϡ£ngx_array_tµÄ¶¨ÒåλÓÚsrc/core/ngx_array.c|hÀïÃæ¡£

typedef struct ngx_array_s       ngx_array_t;
struct ngx_array_s {
void *elts;
ngx_uint_t nelts;
size_t size;
ngx_uint_t nalloc;
ngx_pool_t *pool;
};

elts: Ö¸Ïòʵ¼ÊµÄÊý¾Ý´æ´¢ÇøÓò¡£

nelts: Êý×éʵ¼ÊÔªËØ¸öÊý¡£

size: Êý×éµ¥¸öÔªËØµÄ´óС£¬µ¥Î»ÊÇ×Ö½Ú¡£

nalloc: Êý×éµÄÈÝÁ¿¡£±íʾ¸ÃÊý×éÔÚ²»Òý·¢À©ÈݵÄǰÌáÏ£¬¿ÉÒÔ×î¶à´æ´¢µÄÔªËØµÄ¸öÊý¡£µ±neltsÔö³¤µ½´ïnalloc ʱ£¬Èç¹ûÔÙÍù´ËÊý×éÖÐ´æ´¢ÔªËØ£¬Ôò»áÒý·¢Êý×éµÄÀ©ÈÝ¡£Êý×éµÄÈÝÁ¿½«»áÀ©Õ¹µ½Ô­ÓÐÈÝÁ¿µÄ2±¶´óС¡£Êµ¼ÊÉÏÊÇ·ÖÅäеÄÒ»¿éÄڴ棬еÄÒ»¿éÄÚ´æµÄ´óСÊÇÔ­ÓÐÄÚ´æ´óСµÄ2±¶¡£Ô­ÓеÄÊý¾Ý»á±»¿½±´µ½ÐµÄÒ»¿éÄÚ´æÖС£

pool: ¸ÃÊý×éÓÃÀ´·ÖÅäÄÚ´æµÄÄÚ´æ³Ø¡£

ÏÂÃæ½éÉÜngx_array_tÏà¹Ø²Ù×÷º¯Êý¡£

ngx_array_t *ngx_array_create(ngx_pool_t *p, ngx_uint_t n, size_t size);

´´½¨Ò»¸öеÄÊý×é¶ÔÏ󣬲¢·µ»ØÕâ¸ö¶ÔÏó¡£

p: Êý×é·ÖÅäÄÚ´æÊ¹ÓõÄÄÚ´æ³Ø£»

n: Êý×éµÄ³õʼÈÝÁ¿´óС£¬¼´ÔÚ²»À©ÈݵÄÇé¿öÏÂ×î¶à¿ÉÒÔÈÝÄɵÄÔªËØ¸öÊý¡£

size: µ¥¸öÔªËØµÄ´óС£¬µ¥Î»ÊÇ×Ö½Ú¡£

void ngx_array_destroy(ngx_array_t *a);

Ïú»Ù¸ÃÊý×é¶ÔÏ󣬲¢ÊÍ·ÅÆä·ÖÅäµÄÄÚ´æ»ØÄÚ´æ³Ø¡£

void *ngx_array_push(ngx_array_t *a);

ÔÚÊý×éaÉÏÐÂ×·¼ÓÒ»¸öÔªËØ£¬²¢·µ»ØÖ¸ÏòÐÂÔªËØµÄÖ¸Õë¡£ÐèÒª°Ñ·µ»ØµÄÖ¸ÕëʹÓÃÀàÐÍת»»£¬×ª»»Îª¾ßÌåµÄÀàÐÍ£¬È»ºóÔÙ¸øÐÂÔªËØ±¾Éí»òÕßÊǸ÷×ֶΣ¨Èç¹ûÊý×éµÄÔªËØÊǸ´ÔÓÀàÐÍ£©¸³Öµ¡£

void *ngx_array_push_n(ngx_array_t *a, ngx_uint_t n);

ÔÚÊý×éaÉÏ×·¼Ón¸öÔªËØ£¬²¢·µ»ØÖ¸ÏòÕâЩ׷¼ÓÔªËØµÄÊ׸öÔªËØµÄλÖõÄÖ¸Õë¡£

static ngx_inline ngx_int_t ngx_array_init(ngx_array_t *array, ngx_pool_t *pool, ngx_uint_t n, size_t size);

Èç¹ûÒ»¸öÊý×é¶ÔÏóÊDZ»·ÖÅäÔÚ¶ÑÉϵģ¬ÄÇôµ±µ÷ÓÃngx_array_destroyÏú»ÙÒÔºó£¬Èç¹ûÏëÔÙ´ÎʹÓ㬾ͿÉÒÔµ÷Óô˺¯Êý¡£

Èç¹ûÒ»¸öÊý×é¶ÔÏóÊDZ»·ÖÅäÔÚÕ»Éϵģ¬ÄÇô¾ÍÐèÒªµ÷Óô˺¯Êý£¬½øÐгõʼ»¯µÄ¹¤×÷ÒԺ󣬲ſÉÒÔʹÓá£

×¢ÒâÊÂÏî: ÓÉÓÚʹÓÃngx_palloc·ÖÅäÄڴ棬Êý×éÔÚÀ©ÈÝʱ£¬¾ÉµÄÄÚ´æ²»»á±»ÊÍ·Å£¬»áÔì³ÉÄÚ´æµÄÀË·Ñ¡£Òò´Ë£¬×îºÃÄÜÌáǰ¹æ»®ºÃÊý×éµÄÈÝÁ¿£¬ÔÚ´´½¨»òÕß³õʼ»¯µÄʱºòÒ»´Î¸ã¶¨£¬±ÜÃâ¶à´ÎÀ©ÈÝ£¬Ôì³ÉÄÚ´æÀË·Ñ¡£

ngx_hash_t(100%)

ngx_hash_tÊÇnginx×Ô¼ºµÄhash±íµÄʵÏÖ¡£¶¨ÒåºÍʵÏÖλÓÚsrc/core/ngx_hash.h|cÖС£ngx_hash_tµÄʵÏÖÒ²ÓëÊý¾Ý½á¹¹½Ì¿ÆÊéÉÏËùÃèÊöµÄhash±íµÄʵÏÖÊÇ´óͬСÒì¡£¶ÔÓÚ³£ÓõĽâ¾ö³åÍ»µÄ·½·¨ÓÐÏßÐÔ̽²â£¬¶þ´Î̽²âºÍ¿ªÁ´·¨µÈ¡£ngx_hash_tʹÓõÄÊÇ×î³£ÓõÄÒ»ÖÖ£¬Ò²¾ÍÊÇ¿ªÁ´·¨£¬ÕâÒ²ÊÇSTLÖеÄhash±íʹÓõķ½·¨¡£

µ«ÊÇngx_hash_tµÄʵÏÖÓÖÓÐÆä¼¸¸öÏÔÖøµÄÌØµã:

ngx_hash_t²»ÏñÆäËûµÄhash±íµÄʵÏÖ£¬¿ÉÒÔ²åÈëɾ³ýÔªËØ£¬ËüÖ»ÄÜÒ»´Î³õʼ»¯£¬¾Í¹¹½¨ÆðÕû¸öhash±íÒԺ󣬼Ȳ»ÄÜÔÙɾ³ý£¬Ò²²»ÄÜÔÚ²åÈëÔªËØÁË¡£

ngx_hash_tµÄ¿ªÁ´²¢²»ÊÇÕæµÄ¿ªÁËÒ»¸öÁ´±í£¬Êµ¼ÊÉÏÊÇ¿ªÁËÒ»¶ÎÁ¬ÐøµÄ´æ´¢¿Õ¼ä£¬¼¸ºõ¿ÉÒÔ¿´×öÊÇÒ»¸öÊý×é¡£ÕâÊÇÒòΪngx_hash_tÔÚ³õʼ»¯µÄʱºò£¬»á¾­ÀúÒ»´ÎÔ¤¼ÆËãµÄ¹ý³Ì£¬Ìáǰ°Ñÿ¸öͰÀïÃæ»áÓжàÉÙÔªËØ·Å½øÈ¥¸ø¼ÆËã³öÀ´£¬ÕâÑù¾ÍÌáǰ֪µÀÿ¸öͰµÄ´óСÁË¡£ÄÇô¾Í²»ÐèҪʹÓÃÁ´±í£¬Ò»¶ÎÁ¬ÐøµÄ´æ´¢¿Õ¼ä¾Í×ã¹»ÁË¡£ÕâÒ²´ÓÒ»¶¨³Ì¶ÈÉϽÚÊ¡ÁËÄÚ´æµÄʹÓá£

´ÓÉÏÃæµÄÃèÊö£¬ÎÒÃÇ¿ÉÒÔ¿´³öÀ´£¬Õâ¸öÖµÔ½´ó£¬Ô½Ôì³ÉÄÚ´æµÄÀË·Ñ¡£¾ÍÁ½²½£¬Ê×ÏÈÊdzõʼ»¯£¬È»ºó¾Í¿ÉÒÔÔÚÀïÃæ½øÐвéÕÒÁË¡£ÏÂÃæÎÒÃÇÏêϸÀ´¿´Ò»Ï¡£

ngx_hash_tµÄ³õʼ»¯¡£

 ngx_int_t ngx_hash_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names,
ngx_uint_t nelts);

Ê×ÏÈÎÒÃÇÀ´¿´Ò»Ï³õʼ»¯º¯Êý¡£¸Ãº¯ÊýµÄµÚÒ»¸ö²ÎÊýhinitÊdzõʼ»¯µÄһЩ²ÎÊýµÄÒ»¸ö¼¯ºÏ¡£ namesÊdzõʼ»¯Ò»¸öngx_hash_tËùÐèÒªµÄËùÓÐkeyµÄÒ»¸öÊý×é¡£¶ønelts¾ÍÊÇkeyµÄ¸öÊý¡£ÏÂÃæÏÈ¿´Ò»ÏÂngx_hash_init_tÀàÐÍ£¬¸ÃÀàÐÍÌṩÁ˳õʼ»¯Ò»¸öhash±íËùÐèÒªµÄһЩ»ù±¾ÐÅÏ¢¡£

typedef struct {
ngx_hash_t *hash;
ngx_hash_key_pt key;

ngx_uint_t max_size;
ngx_uint_t bucket_size;

char *name;
ngx_pool_t *pool;
ngx_pool_t *temp_pool;
} ngx_hash_init_t;

hash: ¸Ã×Ö¶ÎÈç¹ûΪNULL£¬ÄÇôµ÷ÓÃÍê³õʼ»¯º¯Êýºó£¬¸Ã×Ö¶ÎÖ¸Ïòд´½¨³öÀ´µÄhash±í¡£Èç¹û¸Ã×ֶβ»ÎªNULL£¬ÄÇôÔÚ³õʼµÄʱºò£¬ËùÓеÄÊý¾Ý±»²åÈëÁËÕâ¸ö×Ö¶ÎËùÖ¸µÄhash±íÖС£

key: Ö¸Ïò´Ó×Ö·û´®Éú³ÉhashÖµµÄhashº¯Êý¡£nginxµÄÔ´´úÂëÖÐÌṩÁËĬÈϵÄʵÏÖº¯Êýngx_hash_key_lc¡£

max_size: hash±íÖеÄͰµÄ¸öÊý¡£¸Ã×Ö¶ÎÔ½´ó£¬ÔªËش洢ʱ³åÍ»µÄ¿ÉÄÜÐÔԽС£¬Ã¿¸öͰÖд洢µÄÔªËØ»á¸üÉÙ£¬Ôò²éѯÆðÀ´µÄËٶȸü¿ì¡£µ±È»£¬Õâ¸öÖµÔ½´ó£¬Ô½Ôì³ÉÄÚ´æµÄÀË·ÑÒ²Ô½´ó£¬(ʵ¼ÊÉÏÒ²À˷Ѳ»Á˶àÉÙ)¡£

bucket_size: ÿ¸öͰµÄ×î´óÏÞÖÆ´óС£¬µ¥Î»ÊÇ×Ö½Ú¡£Èç¹ûÔÚ³õʼ»¯Ò»¸öhash±íµÄʱºò£¬·¢ÏÖij¸öͰÀïÃæÎÞ·¨´æµÄÏÂËùÓÐÊôÓÚ¸ÃͰµÄÔªËØ£¬Ôòhash±í³õʼ»¯Ê§°Ü¡£

name: ¸Ãhash±íµÄÃû×Ö¡£

pool: ¸Ãhash±í·ÖÅäÄÚ´æÊ¹ÓõÄpool¡£

temp_pool: ¸Ãhash±íʹÓõÄÁÙʱpool£¬ÔÚ³õʼ»¯Íê³ÉÒԺ󣬸Ãpool¿ÉÒÔ±»ÊͷźÍÏú»Ùµô¡£

ÏÂÃæÀ´¿´Ò»Ï´洢hash±íkeyµÄÊý×éµÄ½á¹¹¡£

typedef struct {
ngx_str_t key;
ngx_uint_t key_hash;
void *value;
} ngx_hash_key_t;

keyºÍvalueµÄº¬ÒåÏÔ¶øÒ×¼û£¬¾Í²»ÓýâÊÍÁË¡£key_hashÊǶÔkeyʹÓÃhashº¯Êý¼ÆËã³öÀ´µÄÖµ¡£ ¶ÔÕâÁ½¸ö½á¹¹·ÖÎöÍê³ÉÒÔºó£¬ÎÒÏë´ó¼ÒÓ¦¸Ã¶¼ÒѾ­Ã÷°×Õâ¸öº¯ÊýÓ¦¸ÃÊÇÈçºÎʹÓÃÁ˰ɡ£¸Ãº¯Êý³É¹¦³õʼ»¯Ò»¸öhash±íÒԺ󣬷µ»ØNGX_OK£¬·ñÔò·µ»ØNGX_ERROR¡£

void *ngx_hash_find(ngx_hash_t *hash, ngx_uint_t key, u_char *name, size_t len);

ÔÚhashÀïÃæ²éÕÒkey¶ÔÓ¦µÄvalue¡£Êµ¼ÊÉÏÕâÀïµÄkeyÊǶÔÕæÕýµÄkey£¨Ò²¾ÍÊÇname£©¼ÆËã³öµÄhashÖµ¡£lenÊÇnameµÄ³¤¶È¡£

Èç¹û²éÕҳɹ¦£¬Ôò·µ»ØÖ¸ÏòvalueµÄÖ¸Õ룬·ñÔò·µ»ØNULL¡£

ngx_hash_wildcard_t(100%)
nginxΪÁË´¦Àí´øÓÐͨÅä·ûµÄÓòÃûµÄÆ¥ÅäÎÊÌ⣬ʵÏÖÁËngx_hash_wildcard_tÕâÑùµÄhash±í¡£Ëû¿ÉÒÔÖ§³ÖÁ½ÖÖÀàÐ͵ĴøÓÐͨÅä·ûµÄÓòÃû¡£Ò»ÖÖÊÇͨÅä·ûÔÚǰµÄ£¬ÀýÈ磺¡°*.abc.com¡±£¬Ò²¿ÉÒÔÊ¡ÂÔµôÐǺţ¬Ö±½Óд³É¡±.abc.com¡±¡£ÕâÑùµÄkey£¬¿ÉÒÔÆ¥Åäwww.abc.com£¬qqq.www.abc.comÖ®ÀàµÄ¡£ÁíÍâÒ»ÖÖÊÇͨÅä·ûÔÚĩβµÄ£¬ÀýÈ磺¡°mail.xxx.*¡±£¬ÇëÌØ±ð×¢ÒâͨÅä·ûÔÚĩβµÄ²»ÏñλÓÚ¿ªÊ¼µÄͨÅä·û¿ÉÒÔ±»Ê¡ÂÔµô¡£ÕâÑùµÄͨÅä·û£¬¿ÉÒÔÆ¥Åämail.xxx.com¡¢mail.xxx.com.cn¡¢mail.xxx.netÖ®ÀàµÄÓòÃû¡£

ÓÐÒ»µã±ØÐë˵Ã÷£¬¾ÍÊÇÒ»¸öngx_hash_wildcard_tÀàÐ͵Ähash±íÖ»Äܰüº¬Í¨Åä·ûÔÚǰµÄkey»òÕßÊÇͨÅä·ûÔÚºóµÄkey¡£²»ÄÜͬʱ°üº¬Á½ÖÖÀàÐ͵ÄͨÅä·ûµÄkey¡£ngx_hash_wildcard_tÀàÐͱäÁ¿µÄ¹¹½¨ÊÇͨ¹ýº¯Êýngx_hash_wildcard_initÍê³ÉµÄ£¬¶ø²éѯÊÇͨ¹ýº¯Êýngx_hash_find_wc_head»òÕßngx_hash_find_wc_tailÀ´×öµÄ¡£ngx_hash_find_wc_headÊDzéѯ°üº¬Í¨Åä·ûÔÚǰµÄkeyµÄhash±íµÄ£¬¶øngx_hash_find_wc_tailÊDzéѯ°üº¬Í¨Åä·ûÔÚºóµÄkeyµÄhash±íµÄ¡£

ÏÂÃæÏêϸ˵Ã÷Õ⼸¸öº¯ÊýµÄÓ÷¨¡£

ngx_int_t ngx_hash_wildcard_init(ngx_hash_init_t *hinit, ngx_hash_key_t *names,
ngx_uint_t nelts);

¸Ãº¯ÊýÓ­À´¹¹½¨Ò»¸ö¿ÉÒÔ°üº¬Í¨Åä·ûkeyµÄhash±í¡£

hinit: ¹¹ÔìÒ»¸öͨÅä·ûhash±íµÄһЩ²ÎÊýµÄÒ»¸ö¼¯ºÏ¡£¹ØÓڸòÎÊý¶ÔÓ¦µÄÀàÐ͵Ä˵Ã÷£¬Çë²Î¼ûngx_hash_tÀàÐÍÖÐngx_hash_initº¯ÊýµÄ˵Ã÷¡£
names: ¹¹Ôì´Ëhash±íµÄËùÓеÄͨÅä·ûkeyµÄÊý×é¡£ÌØ±ðҪעÒâµÄÊÇÕâÀïµÄkeyÒѾ­¶¼ÊDZ»Ô¤´¦Àí¹ýµÄ¡£ÀýÈ磺¡°*.abc.com¡±»òÕß¡°.abc.com¡±±»Ô¤´¦ÀíÍê³ÉÒԺ󣬱ä³ÉÁË¡°com.abc.¡±¡£¶ø¡°mail.xxx.*¡±Ôò±»Ô¤´¦ÀíΪ¡°mail.xxx.¡±¡£ÎªÊ²Ã´»á±»´¦ÀíÕâÑù£¿ÕâÀï²»µÃ²»¼òµ¥µØÃèÊöÒ»ÏÂͨÅä·ûhash±íµÄʵÏÖÔ­Àí¡£µ±¹¹Ôì´ËÀàÐ͵Ähash±íµÄʱºò£¬Êµ¼ÊÉÏÊǹ¹ÔìÁËÒ»¸öhash±íµÄÒ»¸ö¡°Á´±í¡±£¬ÊÇͨ¹ýhash±íÖеÄkey¡°Á´½Ó¡±ÆðÀ´µÄ¡£±ÈÈ磺¶ÔÓÚ¡°*.abc.com¡±½«»á¹¹Ôì³ö2¸öhash±í£¬µÚÒ»¸öhash±íÖÐÓÐÒ»¸ökeyΪcomµÄ±íÏ¸Ã±íÏîµÄvalue°üº¬ÓÐÖ¸ÏòµÚ¶þ¸öhash±íµÄÖ¸Õ룬¶øµÚ¶þ¸öhash±íÖÐÓÐÒ»¸ö±íÏîabc£¬¸Ã±íÏîµÄvalue°üº¬ÓÐÖ¸Ïò*.abc.com¶ÔÓ¦µÄvalueµÄÖ¸Õë¡£ÄÇô²éѯµÄʱºò£¬±ÈÈç²éѯwww.abc.comµÄʱºò£¬ÏȲécom£¬Í¨¹ý²écom¿ÉÒÔÕÒµ½µÚ¶þ¼¶µÄhash±í£¬ÔÚµÚ¶þ¼¶hash±íÖУ¬ÔÙ²éÕÒabc£¬ÒÀ´ÎÀàÍÆ£¬Ö±µ½ÔÚijһ¼¶µÄhash±íÖв鵽µÄ±íÏî¶ÔÓ¦µÄvalue¶ÔÓ¦Ò»¸öÕæÕýµÄÖµ¶ø·ÇÒ»¸öÖ¸ÏòÏÂÒ»¼¶hash±íµÄÖ¸ÕëµÄʱºò£¬²éѯ¹ý³Ì½áÊø¡£ÕâÀïÓÐÒ»µãÐèÒªÌØ±ð×¢ÒâµÄ£¬¾ÍÊÇnamesÊý×éÖÐÔªËØµÄvalueÖµµÍÁ½Î»bit±ØÐëΪ0£¨ÓÐÌØÊâÓÃ;£©¡£Èç¹û²»Âú×ãÕâ¸öÌõ¼þ£¬Õâ¸öhash±í²éѯ²»³öÕýÈ·½á¹û¡£

nelts: namesÊý×éÔªËØµÄ¸öÊý¡£

¸Ãº¯ÊýÖ´Ðгɹ¦·µ»ØNGX_OK£¬·ñÔòNGX_ERROR¡£

void *ngx_hash_find_wc_head(ngx_hash_wildcard_t *hwc, u_char *name, size_t len);

¸Ãº¯Êý²éѯ°üº¬Í¨Åä·ûÔÚǰµÄkeyµÄhash±íµÄ¡£

hwc: hash±í¶ÔÏóµÄÖ¸Õë¡£

name: ÐèÒª²éѯµÄÓòÃû£¬ÀýÈç: www.abc.com¡£

len: nameµÄ³¤¶È¡£

¸Ãº¯Êý·µ»ØÆ¥ÅäµÄͨÅä·û¶ÔÓ¦value¡£Èç¹ûûÓв鵽£¬·µ»ØNULL¡£

void *ngx_hash_find_wc_tail(ngx_hash_wildcard_t *hwc, u_char *name, size_t len);

¸Ãº¯Êý²éѯ°üº¬Í¨Åä·ûÔÚĩβµÄkeyµÄhash±íµÄ¡£ ²ÎÊý¼°·µ»ØÖµÇë²Î¼ÓÉϸöº¯ÊýµÄ˵Ã÷¡£

ngx_hash_combined_t(100%)

×éºÏÀàÐÍhash±í£¬¸Ãhash±íµÄ¶¨ÒåÈçÏ£º

typedef struct {
ngx_hash_t hash;
ngx_hash_wildcard_t *wc_head;
ngx_hash_wildcard_t *wc_tail;
} ngx_hash_combined_t;

´ÓÆä¶¨ÒåÏÔ¼û£¬¸ÃÀàÐÍʵ¼ÊÉϰüº¬ÁËÈý¸öhash±í£¬Ò»¸öÆÕͨhash±í£¬Ò»¸ö°üº¬Ç°ÏòͨÅä·ûµÄhash±íºÍÒ»¸ö°üº¬ºóÏòͨÅä·ûµÄhash±í¡£

nginxÌṩ¸ÃÀàÐ͵Ä×÷Óã¬ÔÚÓÚÌṩһ¸ö·½±ãµÄÈÝÆ÷°üº¬Èý¸öÀàÐ͵Ähash±í£¬µ±Óаüº¬Í¨Åä·ûµÄºÍ²»°üº¬Í¨Åä·ûµÄÒ»×ékey¹¹½¨hash±íÒÔºó£¬ÒÔÒ»ÖÖ·½±ãµÄ·½Ê½À´²éѯ£¬Äã²»ÐèÒªÔÙ¿¼ÂÇÒ»¸ökeyµ½µ×ÊÇÓ¦¸Ãµ½ÄĸöÀàÐ͵Ähash±íÀïÈ¥²éÁË¡£

¹¹ÔìÕâÑùÒ»×éºÏhash±íµÄʱºò£¬Ê×Ïȶ¨ÒåÒ»¸ö¸ÃÀàÐ͵ıäÁ¿£¬ÔÙ·Ö±ð¹¹ÔìÆä°üº¬µÄÈý¸ö×Óhash±í¼´¿É¡£

¶ÔÓÚ¸ÃÀàÐÍhash±íµÄ²éѯ£¬nginxÌṩÁËÒ»¸ö·½±ãµÄº¯Êýngx_hash_find_combined¡£

void *ngx_hash_find_combined(ngx_hash_combined_t *hash, ngx_uint_t key,
u_char *name, size_t len);

¸Ãº¯ÊýÔÚ´Ë×éºÏhash±íÖУ¬ÒÀ´Î²éѯÆäÈý¸ö×Óhash±í£¬¿´ÊÇ·ñÆ¥Å䣬һµ©ÕÒµ½£¬Á¢¼´·µ»Ø²éÕÒ½á¹û£¬Ò²¾ÍÊÇ˵Èç¹ûÓжà¸ö¿ÉÄÜÆ¥Å䣬ÔòÖ»·µ»ØµÚÒ»¸öÆ¥ÅäµÄ½á¹û¡£

hash: ´Ë×éºÏhash±í¶ÔÏó¡£

key: ¸ù¾Ýname¼ÆËã³öµÄhashÖµ¡£

name: keyµÄ¾ßÌåÄÚÈÝ¡£

len: nameµÄ³¤¶È¡£

·µ»Ø²éѯµÄ½á¹û£¬Î´²éµ½Ôò·µ»ØNULL¡£

ngx_hash_keys_arrays_t(100%)

´ó¼Ò¿´µ½ÔÚ¹¹½¨Ò»¸öngx_hash_wildcard_tµÄʱºò£¬ÐèÒª¶ÔͨÅä·ûµÄÄÄЩkey½øÐÐÔ¤´¦Àí¡£Õâ¸ö´¦ÀíÆðÀ´±È½ÏÂé·³¡£¶øµ±ÓÐÒ»×ékey£¬ÕâЩÀïÃæ¼ÈÓÐÎÞͨÅä·ûµÄkey£¬Ò²Óаüº¬Í¨Åä·ûµÄkeyµÄʱºò¡£ÎÒÃǾÍÐèÒª¹¹½¨Èý¸öhash±í£¬Ò»¸ö°üº¬ÆÕͨµÄkeyµÄhash±í£¬Ò»¸ö°üº¬Ç°ÏòͨÅä·ûµÄhash±í£¬Ò»¸ö°üº¬ºóÏòͨÅä·ûµÄhash±í£¨»òÕßÒ²¿ÉÒÔ°ÑÕâÈý¸öhash±í×éºÏ³ÉÒ»¸öngx_hash_combined_t£©¡£ÔÚÕâÖÖÇé¿öÏ£¬ÎªÁËÈôó¼Ò·½±ãµÄ¹¹ÔìÕâЩhash±í£¬nginxÌṩ¸øÁ˴˸¨ÖúÀàÐÍ¡£

¸ÃÀàÐÍÒÔ¼°Ïà¹ØµÄ²Ù×÷º¯ÊýÒ²¶¨ÒåÔÚsrc/core/ngx_hash.h|cÀï¡£ÎÒÃÇÏÈÀ´¿´Ò»Ï¸ÃÀàÐ͵͍Òå¡£

typedef struct {
    ngx_uint_t        hsize;

    ngx_pool_t       *pool;
    ngx_pool_t       *temp_pool;

    ngx_array_t       keys;
    ngx_array_t      *keys_hash;

    ngx_array_t       dns_wc_head;
    ngx_array_t      *dns_wc_head_hash;

    ngx_array_t       dns_wc_tail;
    ngx_array_t      *dns_wc_tail_hash;
} ngx_hash_keys_arrays_t;

hsize: ½«Òª¹¹½¨µÄhash±íµÄͰµÄ¸öÊý¡£¶ÔÓÚʹÓÃÕâ¸ö½á¹¹Öаüº¬µÄÐÅÏ¢¹¹½¨µÄÈýÖÖÀàÐ͵Ähash±í¶¼»áʹÓô˲ÎÊý¡£

pool: ¹¹½¨ÕâЩhash±íʹÓõÄpool¡£

temp_pool: ÔÚ¹¹½¨Õâ¸öÀàÐÍÒÔ¼°×îÖÕµÄÈý¸öhash±í¹ý³ÌÖпÉÄÜÓõ½ÁÙʱpool¡£¸Ãtemp_pool¿ÉÒÔÔÚ¹¹½¨Íê³ÉÒԺ󣬱»Ïú»Ùµô¡£ÕâÀïÖ»ÊÇ´æ·ÅÁÙʱµÄһЩÄÚ´æÏûºÄ¡£

keys: ´æ·ÅËùÓзÇͨÅä·ûkeyµÄÊý×é¡£

keys_hash: ÕâÊǸö¶þάÊý×飬µÚÒ»¸öά¶È´ú±íµÄÊÇbucketµÄ±àºÅ£¬ÄÇôkeys_hash[i]Öдæ·ÅµÄÊÇËùÓеÄkeyËã³öÀ´µÄhashÖµ¶ÔhsizeȡģÒÔºóµÄֵΪiµÄkey¡£¼ÙÉèÓÐ3¸ökey,·Ö±ðÊÇkey1,key2ºÍkey3¼ÙÉèhashÖµËã³öÀ´ÒÔºó¶ÔhsizeȡģµÄÖµ¶¼ÊÇi£¬ÄÇôÕâÈý¸ökeyµÄÖµ¾Í˳Ðò´æ·ÅÔÚkeys_hash[i][0],keys_hash[i][1], keys_hash[i][2]¡£¸ÃÖµÔÚµ÷ÓõĹý³ÌÖÐÓÃÀ´±£´æºÍ¼ì²âÊÇ·ñÓгåÍ»µÄkeyÖµ£¬Ò²¾ÍÊÇÊÇ·ñÓÐÖØ¸´¡£

dns_wc_head: ·ÅǰÏòͨÅä·ûkey±»´¦ÀíÍê³ÉÒÔºóµÄÖµ¡£±ÈÈ磺¡°*.abc.com¡± ±»´¦ÀíÍê³ÉÒԺ󣬱ä³É ¡°com.abc.¡± ±»´æ·ÅÔÚ´ËÊý×éÖС£

dns_wc_tail: ´æ·ÅºóÏòͨÅä·ûkey±»´¦ÀíÍê³ÉÒÔºóµÄÖµ¡£±ÈÈ磺¡°mail.xxx.*¡± ±»´¦ÀíÍê³ÉÒԺ󣬱ä³É ¡°mail.xxx.¡± ±»´æ·ÅÔÚ´ËÊý×éÖС£

dns_wc_head_hash:

¸ÃÖµÔÚµ÷ÓõĹý³ÌÖÐÓÃÀ´±£´æºÍ¼ì²âÊÇ·ñÓгåÍ»µÄǰÏòͨÅä·ûµÄkeyÖµ£¬Ò²¾ÍÊÇÊÇ·ñÓÐÖØ¸´¡£

dns_wc_tail_hash:

¸ÃÖµÔÚµ÷ÓõĹý³ÌÖÐÓÃÀ´±£´æºÍ¼ì²âÊÇ·ñÓгåÍ»µÄºóÏòͨÅä·ûµÄkeyÖµ£¬Ò²¾ÍÊÇÊÇ·ñÓÐÖØ¸´¡£

ÔÚ¶¨ÒåÒ»¸öÕâ¸öÀàÐ͵ıäÁ¿£¬²¢¶Ô×Ö¶ÎpoolºÍtemp_pool¸³ÖµÒԺ󣬾ͿÉÒÔµ÷Óú¯Êýngx_hash_add_key°ÑËùÓеÄkey¼ÓÈëµ½Õâ¸ö½á¹¹ÖÐÁË£¬¸Ãº¯Êý»á×Ô¶¯ÊµÏÖÆÕͨkey£¬´øÇ°ÏòͨÅä·ûµÄkeyºÍ´øºóÏòͨÅä·ûµÄkeyµÄ·ÖÀàºÍ¼ì²é£¬²¢½«Õâ¸öЩֵ´æ·Åµ½¶ÔÓ¦µÄ×Ö¶ÎÖÐÈ¥£¬ È»ºó¾Í¿ÉÒÔͨ¹ý¼ì²éÕâ¸ö½á¹¹ÌåÖеÄkeys¡¢dns_wc_head¡¢dns_wc_tailÈý¸öÊý×éÊÇ·ñΪ¿Õ£¬À´¾ö¶¨ÊÇ·ñ¹¹½¨ÆÕͨhash±í£¬Ç°ÏòͨÅä·ûhash±íºÍºóÏòͨÅä·ûhash±íÁË£¨ÔÚ¹¹½¨ÕâÈý¸öÀàÐ͵Ähash±íµÄʱºò£¬¿ÉÒÔ·Ö±ðʹÓÃkeys¡¢dns_wc_head¡¢dns_wc_tailÈý¸öÊý×飩¡£

¹¹½¨³öÕâÈý¸öhash±íÒԺ󣬿ÉÒÔ×éºÏÔÚÒ»¸öngx_hash_combined_t¶ÔÏóÖУ¬Ê¹ÓÃngx_hash_find_combined½øÐвéÕÒ¡£»òÕßÊÇÈÔÈ»±£³ÖÈý¸ö¶ÀÁ¢µÄ±äÁ¿¶ÔÓ¦ÕâÈý¸öhash±í£¬×Ô¼º¾ö¶¨ºÎʱÒÔ¼°ÔÚÄĸöhash±íÖнøÐвéѯ¡£

ngx_int_t ngx_hash_keys_array_init(ngx_hash_keys_arrays_t *ha, ngx_uint_t type);

³õʼ»¯Õâ¸ö½á¹¹£¬Ö÷ÒªÊǶÔÕâ¸ö½á¹¹ÖеÄngx_array_tÀàÐ͵Ä×ֶνøÐгõʼ»¯£¬³É¹¦·µ»ØNGX_OK¡£

ha: ¸Ã½á¹¹µÄ¶ÔÏóÖ¸Õë¡£

type: ¸Ã×Ö¶ÎÓÐ2¸öÖµ¿ÉÑ¡Ôñ£¬¼´NGX_HASH_SMALLºÍNGX_HASH_LARGE¡£ÓÃÀ´Ö¸Ã÷½«Òª½¨Á¢µÄhash±íµÄÀàÐÍ£¬Èç¹ûÊÇNGX_HASH_SMALL£¬ÔòÓбȽÏСµÄͰµÄ¸öÊýºÍÊý×éÔªËØ´óС¡£NGX_HASH_LARGEÔòÏà·´¡£

ngx_int_t ngx_hash_add_key(ngx_hash_keys_arrays_t *ha, ngx_str_t *key,
void *value, ngx_uint_t flags);

Ò»°ãÊÇÑ­»·µ÷ÓÃÕâ¸öº¯Êý£¬°ÑÒ»×é¼üÖµ¶Ô¼ÓÈëµ½Õâ¸ö½á¹¹ÌåÖС£·µ»ØNGX_OKÊǼÓÈë³É¹¦¡£·µ»ØNGX_BUSYÒâζ×ÅkeyÖµÖØ¸´¡£

ha: ¸Ã½á¹¹µÄ¶ÔÏóÖ¸Õë¡£

key: ²ÎÊýÃû×Ô½âÊÍÁË¡£

value: ²ÎÊýÃû×Ô½âÊÍÁË¡£

flags: ÓÐÁ½¸ö±ê־λ¿ÉÒÔÉèÖã¬NGX_HASH_WILDCARD_KEYºÍNGX_HASH_READONLY_KEY¡£Í¬Ê±ÒªÉèÖõÄʹÓÃÂß¼­Óë²Ù×÷·û¾Í¿ÉÒÔÁË¡£NGX_HASH_READONLY_KEY±»ÉèÖõÄʱºò£¬ÔÚ¼ÆËãhashÖµµÄʱºò£¬keyµÄÖµ²»»á±»×ª³ÉСд×Ö·û£¬·ñÔò»á¡£NGX_HASH_WILDCARD_KEY±»ÉèÖõÄʱºò£¬ËµÃ÷keyÀïÃæ¿ÉÄܺ¬ÓÐͨÅä·û£¬»á½øÐÐÏàÓ¦µÄ´¦Àí¡£Èç¹ûÁ½¸ö±ê־λ¶¼²»ÉèÖ㬴«0¡£

ÓйØÓÚÕâ¸öÊý¾Ý½á¹¹µÄʹÓ㬿ÉÒԲο¼src/http/ngx_http.cÖеÄngx_http_server_namesº¯Êý¡£

   
2274 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ר¼ÒÊӽǿ´ITÓë¼Ü¹¹
Èí¼þ¼Ü¹¹Éè¼Æ
ÃæÏò·þÎñÌåϵ¼Ü¹¹ºÍÒµÎñ×é¼þ
ÈËÈËÍøÒÆ¶¯¿ª·¢¼Ü¹¹
¼Ü¹¹¸¯»¯Ö®ÃÕ
̸ƽ̨¼´·þÎñPaaS


ÃæÏòÓ¦Óõļܹ¹Éè¼ÆÊµ¼ù
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Èí¼þ¼Ü¹¹Ê¦¡ª¸ß¼¶Êµ¼ù
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
SOAÌåϵ½á¹¹Êµ¼ù


Èñ°²¿Æ¼¼ Èí¼þ¼Ü¹¹Éè¼Æ·½·¨
³É¶¼ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£Æû³µ ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
±±¾© Èí¼þ¼Ü¹¹Éè¼Æ
ÉϺ£ Èí¼þ¼Ü¹¹Éè¼Æ°¸ÀýÓëʵ¼ù
±±¾© ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ÉîÛÚ ¼Ü¹¹Éè¼Æ·½·¨°¸ÀýÓëʵ¼ù
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù