Der Dienststart ist prozessabhängig. Die Aliasfunktion im Quellcode ist tcp Modus.
long sock_type = SW_SOCK_TCP; long serv_port; long serv_mode = SW_MODE_PROCESS;
SwServer-Speicher zuweisen und initialisieren
swServer_init(serv);
Hauptsächlich Fabrikmodus, Reaktornummer, Reaktornummer, Verteilungsmodus, Versandmodus, Ringpuffergröße, Ringpuffergröße, Timeout (bestehend aus timeout_sec und timeout_usec) und Worker-Prozessnummer worker_num, maximale Anzahl von Verbindungen max_connection, maximale Anzahl von Anforderungen max_request, http_server-Dienstkonfigurationsinformationen, Heartbeat-Leerlaufzeit heartbeat_idel_time und Prüfintervall heartbeat_check_interval, Puffer-Eingabe- und Ausgabegrößen buffer_input_size und buffer_output_size sowie Pipeline-Cache-Größe.
swoole_init(); bzero(serv, sizeof(swServer)); serv->factory_mode = SW_MODE_BASE; serv->reactor_num = SW_REACTOR_NUM > SW_REACTOR_MAX_THREAD ? SW_REACTOR_MAX_THREAD : SW_REACTOR_NUM; serv->dispatch_mode = SW_DISPATCH_FDMOD; serv->ringbuffer_size = SW_QUEUE_SIZE; serv->timeout_sec = SW_REACTOR_TIMEO_SEC; serv->timeout_usec = SW_REACTOR_TIMEO_USEC; //300ms; serv->worker_num = SW_CPU_NUM; serv->max_connection = SwooleG.max_sockets; serv->max_request = 0; //http server serv->http_parse_post = 1; serv->upload_tmp_dir = "/tmp"; //heartbeat check serv->heartbeat_idle_time = SW_HEARTBEAT_IDLE; serv->heartbeat_check_interval = SW_HEARTBEAT_CHECK; serv->buffer_input_size = SW_BUFFER_INPUT_SIZE; serv->buffer_output_size = SW_BUFFER_OUTPUT_SIZE; serv->pipe_buffer_size = SW_PIPE_BUFFER_SIZE; SwooleG.serv = serv;
Analysieren Sie gleichzeitig die IP des Diensthosts, die Portnummer, den Dienstmodus und den Sockentyp und fügen Sie die Informationen zum Server-Überwachungsport zur Liste swServer_add_port der Listenliste hinzu.
//create server socket int sock = swSocket_create(ls->type); if (sock < 0) { swSysError("create socket failed."); return NULL; } //bind address and port if (swSocket_bind(sock, ls->type, ls->host, ls->port) < 0) { return NULL; } //dgram socket, setting socket buffer size if (swSocket_is_dgram(ls->type)) { setsockopt(sock, SOL_SOCKET, SO_SNDBUF, &ls->socket_buffer_size, sizeof(int)); setsockopt(sock, SOL_SOCKET, SO_RCVBUF, &ls->socket_buffer_size, sizeof(int)); } //O_NONBLOCK & O_CLOEXEC swoole_fcntl_set_option(sock, 1, 1); ls->sock = sock; if (swSocket_is_dgram(ls->type)) { serv->have_udp_sock = 1; serv->dgram_port_num++; if (ls->type == SW_SOCK_UDP) { serv->udp_socket_ipv4 = sock; } else if (ls->type == SW_SOCK_UDP6) { serv->udp_socket_ipv6 = sock; } } else { serv->have_tcp_sock = 1; } LL_APPEND(serv->listen_list, ls); serv->listen_port_num++;
Verwenden Sie swoole_server->start zum Starten (swoole_server_start), Registrieren Sie einige Standard- und benutzerdefinierte Rückrufe, protokollieren Sie die Initialisierung und implementieren Sie die Factory-Initialisierung entsprechend dem Dienstmodus (php_swoole_server_before_start).
Die Startfunktion der Fabrik erstellt je nach Dienstmodus mehrere Prozesse oder einzelne Prozesse, Threads oder Threads (swServer_create).
Abhängig davon, ob OpenSSL zum Lesen der Zertifikatsdatei verwendet werden soll, ob der Guardian-Modus zum Initialisieren des Protokolls und zum Aktivieren des Guardian aktiviert werden soll. swServer_start_proxy erstellt main_reactor, der für die Verarbeitung des Listening-Sockets und die Erstellung des Reaktorthreads verantwortlich ist.
(Empfohlenes Lernen: Swoole-Video-Tutorial)
Das obige ist der detaillierte Inhalt vonSo aktivieren Sie den Swoole-Dienst. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!