>PHP 프레임워크 >Swoole >Swoole 서비스를 활성화하는 방법

Swoole 서비스를 활성화하는 방법

尚
원래의
2019-12-09 10:00:052679검색

Swoole 서비스를 활성화하는 방법

서비스 시작은 프로세스에 따라 다릅니다. 소스 코드의 별칭 함수는 swoole_server_create입니다. 서비스 모드는 serv_mode입니다.

long sock_type = SW_SOCK_TCP;
long serv_port;
long serv_mode = SW_MODE_PROCESS;

swServer 메모리 할당 및 초기화

swServer_init(serv);

주로 Factory_mode, 리액터 번호 Reactor_num, 배포 모드 Dispatch_mode, 링 버퍼 크기 ringbuffer_size, 타임아웃(timeout_sec 및 timeout_usec로 구성), 작업자 프로세스 수 Worker_num, 최대 연결 수 max_connection, 최대 요청 수 max_request, http_server 서비스 구성 정보, 하트비트 유휴 시간 heartbeat_idel_time 및 확인 간격 heartbeat_check_interval, 버퍼 입력 및 출력 크기 buffer_input_size 및 buffer_output_size 및 파이프라인 캐시 크기.

    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;

동시에 서비스 호스트 IP, 포트 번호, 서비스 모드 및 sock_type을 분석하고 서버 수신 포트 정보를 listening_list 목록 swServer_add_port에 추가합니다.

//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++;

swoole_server->start를 사용하여 시작(swoole_server_start)하고, 기본 및 사용자 정의 콜백을 등록하고, 초기화를 로그하고, 서비스 모드(php_swoole_server_before_start)에 따라 공장 초기화를 구현합니다.

공장의 시작 기능은 서비스 모드에 따라 여러 프로세스 또는 단일 프로세스, 스레드 또는 스레드(swServer_create)를 생성합니다.

openssl을 사용하여 인증서 파일을 읽는지 여부에 따라 가드 모드를 활성화하여 로그를 초기화하고 가드를 활성화할지 여부. swServer_start_proxy는 청취 소켓 처리 및 리액터 스레드 생성을 담당하는 main_reactor를 생성합니다.

(추천 학습: swoole 동영상 튜토리얼)

위 내용은 Swoole 서비스를 활성화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.