Heim >PHP-Framework >Swoole >So aktivieren Sie den Swoole-Dienst

So aktivieren Sie den Swoole-Dienst

尚
Original
2019-12-09 10:00:052679Durchsuche

So aktivieren Sie den Swoole-Dienst

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!

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