서비스 시작은 프로세스에 따라 다릅니다. 소스 코드의 별칭 함수는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!