Heim >Backend-Entwicklung >PHP-Tutorial >[Nginx-Quellcode-Analyse] Hauptfunktionsanalyse

[Nginx-Quellcode-Analyse] Hauptfunktionsanalyse

WBOY
WBOYOriginal
2016-08-08 09:24:52953Durchsuche

ngx_strerror_init

Die Hauptfunktion besteht darin, zunächst die Fehlerinformationen im Array ngx_sys_errlist zu speichern und ein Zuordnungsarray von errno->errmsg zu erstellen. Wenn im System ein Fehler auftritt, können Sie errmsg direkt über errno finden , wodurch der API-Aufruf reduziert wird.

ngx_get_options(argc, argv)

Diese Funktion setzt hauptsächlich einige Flag-Variablen basierend auf Benutzereingaben und speichert die vom Benutzer eingegebenen Parameter.

Param		flag
?/h			ngx_show_version=1/ngx_show_help=1
v			ngx_show_version=1
V			ngx_show_version=1/ngx_show_configure=1
t			ngx_test_config=1
q			ngx_quiet_mode=1
p			ngx_prefix=argv[index]支持-p/home/work/nginx or –p /home/work/nginx
c			ngx_conf_file=p支持方式同上
g			ngx_conf_param=p	支持方式同上
s			ngx_signal=p/ngx_process=NGX_PROCESS_SIGNALLER(stop、quit、reopen、reload)

ngx_time_init->ngx_time_update

                                                ngx_regex_ init( )

variable									format
ngx_cached_time = tp;						
ngx_cached_http_time.data = p0;				“Mon, 28 Sep 1970 06:00:00 GMT”
ngx_cached_err_log_time.data = p1;			“1970/09/28 12:00:00”
ngx_cached_http_log_time.data = p2;			“28/Sep/1970:12:00:00 +0600”
ngx_cached_http_log_iso8601.data = p3		        “1970-09-28T12:00:00+06:00”
Setzt hauptsächlich zwei pcre globale Zuordnungs- und Recyclingfunktionen

ngx_pid = getpid();//Erhalte die Hauptprozess-PID

ngx_log_init(ngx_prefix)


Der endgültige Rückgabewert und das von der Funktion erstellte ngx_log
#if (NGX_WIN32)
     if (name[1] != ':') {
#else
     if (name[0] != '/') {
#endif

         if (prefix) {
             plen = ngx_strlen(prefix);//如果用户输入了-p prefix

         } else {
#ifdef NGX_PREFIX
             prefix = (u_char *) NGX_PREFIX;//用户没输入,使用configure路径
             plen = ngx_strlen(prefix);
#else
             plen = 0;
#endif
         }

         if (plen) {
             name = malloc(plen + nlen + 2);
             if (name == NULL) {
                 return NULL;
             }

             p = ngx_cpymem(name, prefix, plen);//copy prefix

             if (!ngx_path_separator(*(p - 1))) {
                 *p++ = '/';
             }

             ngx_cpystrn(p, (u_char *) NGX_ERROR_LOG_PATH, nlen + 1);//copy path

             p = name;
         }
     }

init_cycle.pool = ngx_create_pool(1024, log);// Ordnen Sie einen Speicherpoolknoten zu, einen bestimmten Speicherpool. Weitere Informationen finden Sie im Speicherpool-Analysedokument

ngx_log
{
	ngx_log.file = &ngx_log_file;
	{
		ngx_fd_t		fd;//打开的错误日志
		ngx_str_t		name;//未设置
		u_char		*buffer;//未设置
		u_char		*pos;//未设置
		u_char		*last;//未设置
	}
	log_level = NGX_LOG_NOTICE;
}
Einzelheiten

ngx_save_argv

Die Funktion speichert die vom Benutzer eingegebenen Parameter im Array ngx_argv

ngx_process_options

Diese Funktion verarbeitet hauptsächlich Benutzereingabeparameter, Konfigurationsdateien und Tests Konfigurationsdateien,

conf_file =/home/work/hunter/nginx/nginx_gdb/conf/nginx.conf

conf_prefix =/home/work/hunter/nginx/nginx_gdb/conf

Präfix =/home/work/hunter/nginx/nginx_gdb

ngx_crc32_table_init()//CRC-Tabelle initialisieren

//Modulindex jedes Moduls festlegen

und analysieren Sie dann die Konfigurationsanalyse

ngx_max_module = 0;
for (i = 0; ngx_modules[i]; i++) {
ngx_modules[i]->index = ngx_max_module++;
}
ngx_init_cycl()

Das Obige stellt die Hauptfunktionsanalyse von [Nginx-Quellcode-Analyse] vor, einschließlich Aspekten des Inhalts. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn