サービスの起動はプロセスに依存します。プロセス内で swoole_server で作成されます。ソースコード内のエイリアス関数は swoole_server_create です。デフォルトの sock_type は tcp です。サービス モード 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 を分析し、サーバーのリスニング ポート情報を listen_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 は、listen ソケットの処理とリアクター スレッドの作成を担当する main_reactor を作成します。
(推奨学習: swoole ビデオ チュートリアル )
以上がswooleサービスを有効にする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。