Swoole 4.x服務器Server配置和函數(shù)列表
本文總結(jié)了Swoole 4.x服務器預定義常量、Server配置選項、Server函數(shù)列表、Server屬性列表、事件回調(diào)函數(shù)
簡介
Swoole 是一個使用 C++ 語言編寫的基于異步事件驅(qū)動和協(xié)程的并行網(wǎng)絡通信引擎,為 PHP 提供協(xié)程、高性能網(wǎng)絡編程支持。提供了多種通信協(xié)議的網(wǎng)絡服務器和客戶端模塊,可以方便快速的實現(xiàn) TCP/UDP服務、高性能Web、WebSocket服務、物聯(lián)網(wǎng)、實時通訊、游戲、微服務等,使 PHP 不再局限于傳統(tǒng)的 Web 領(lǐng)域。
PHP的異步、并行、高性能網(wǎng)絡通信引擎,使用純C語言編寫,提供了多種通信協(xié)議的異步IO服務器和客戶端。Swoole4 支持了完整的 Coroutine + Channel CSP 編程模式 ,可以使用同步風格實現(xiàn)異步程序。
預定義常量
// 預定義常量 SWOOLE_VERSION 當前Swoole的版本號,字符串類型,如1.6.0 // swoole_server構(gòu)造函數(shù)參數(shù) SWOOLE_BASE 使用Base模式,業(yè)務代碼在Reactor進程中直接執(zhí)行 SWOOLE_PROCESS 使用進程模式,業(yè)務代碼在Worker進程中執(zhí)行 // swoole_client構(gòu)造函數(shù)參數(shù) SWOOLE_SOCK_TCP 創(chuàng)建tcp socket SWOOLE_SOCK_TCP6 創(chuàng)建tcp ipv6 socket SWOOLE_SOCK_UDP 創(chuàng)建udp socket SWOOLE_SOCK_UDP6 創(chuàng)建udp ipv6 socket SWOOLE_SOCK_SYNC 同步客戶端 SWOOLE_SOCK_ASYNC 異步客戶端 // swoole_lock構(gòu)造函數(shù)參數(shù) SWOOLE_FILELOCK 創(chuàng)建文件鎖 SWOOLE_MUTEX 創(chuàng)建互斥鎖 SWOOLE_RWLOCK 創(chuàng)建讀寫鎖 SWOOLE_SPINLOCK 創(chuàng)建自旋鎖 SWOOLE_SEM 創(chuàng)建信號量 // SSL加密方法 SWOOLE_SSLv3_SERVER_METHOD; SWOOLE_SSLv3_METHOD; SWOOLE_SSLv3_CLIENT_METHOD; SWOOLE_SSLv23_METHOD 默認加密方法; SWOOLE_SSLv23_SERVER_METHOD; SWOOLE_SSLv23_CLIENT_METHOD; SWOOLE_TLSv1_METHOD; SWOOLE_TLSv1_SERVER_METHOD; SWOOLE_TLSv1_CLIENT_METHOD; SWOOLE_TLSv1_1_METHOD; SWOOLE_TLSv1_1_SERVER_METHOD; SWOOLE_TLSv1_1_CLIENT_METHOD; SWOOLE_TLSv1_2_METHOD; SWOOLE_TLSv1_2_SERVER_METHOD; SWOOLE_TLSv1_2_CLIENT_METHOD; SWOOLE_DTLSv1_METHOD; SWOOLE_DTLSv1_SERVER_METHOD; SWOOLE_DTLSv1_CLIENT_METHOD;
Server 配置選項
$serv->set(array( // 通過此參數(shù)來調(diào)節(jié)主進程內(nèi)事件處理線程的數(shù)量,以充分利用多核。默認會啟用CPU核數(shù)相同的數(shù)量。一般設置為CPU核數(shù)的1-4倍 'reactor_num' => 2, // 設置啟動的Worker進程數(shù)。業(yè)務代碼是全異步非阻塞的,這里設置為CPU的1-4倍最合理 // 業(yè)務代碼為同步阻塞,需要根據(jù)請求響應時間和系統(tǒng)負載來調(diào)整 'worker_num' => 2, // 設置worker進程的最大任務數(shù),默認為0,一個worker進程在處理完超過此數(shù)值的任務后將自動退出,進程退出后會釋放所有內(nèi)存和資源。 'max_request' => 1000, // 服務器程序,最大允許的連接數(shù), 此參數(shù)用來設置Server最大允許維持多少個TCP連接。超過此數(shù)量后,新進入的連接將被拒絕 'max_connection' => 10000, // 配置Task進程的數(shù)量,配置此參數(shù)后將會啟用task功能。所以Server務必要注冊onTask 'task_worker_num' => 2, // 設置Task進程與Worker進程之間通信的方式。1使用unix socket通信,默認模式, 2使用消息隊列通信, 3使用消息隊列通信,并設置為爭搶模式 'task_ipc_mode' => 1 // 設置task進程的最大任務數(shù)。一個task進程在處理完超過此數(shù)值的任務后將自動退出。 'task_max_request' => 0, // 設置task的數(shù)據(jù)臨時目錄,在swoole_server中,如果投遞的數(shù)據(jù)超過8192字節(jié),將啟用臨時文件來保存數(shù)據(jù) 'task_tmpdir' => '/tmp', // 數(shù)據(jù)包分發(fā)策略默認為2。1輪循模式,2固定模式,3搶占模式,4IP分配,5UID分配 'dispatch_mode' => 2, // 設置dispatch函數(shù),swoole底層了內(nèi)置了5種dispatch_mode,如果仍然無法滿足需求。 // 可以使用編寫C++函數(shù)或PHP函數(shù),實現(xiàn)dispatch邏輯。使用方法: 'dispatch_func' => 'my_dispatch_function', // 設置消息隊列的KEY,僅在task_ipc_mode = 2/3時使用。 // 設置的Key僅作為Task任務隊列的KEY,此參數(shù)的默認值為ftok($php_script_file, 1) 'message_queue_key' => ftok(SYS_ROOT . 'queue.msg', 1), // 設置守護進程模式 'daemonize' => 1, // Listen隊列長度,如backlog => 128,此參數(shù)將決定最多同時有多少個等待accept的連接 'backlog' => 128, // 指定swoole錯誤日志文件。在swoole運行期發(fā)生的異常信息會記錄到這個文件中。默認會打印到屏幕 'log_file' => '/data/logs/swoole.log', // 設置swoole_server錯誤日志打印的等級,范圍是0-5。低于log_level設置的日志信息不會拋出 'log_level' => 1, // 啟用心跳檢測,此選項表示每隔多久輪循一次,單位為秒 'heartbeat_check_interval' => 10, // 與heartbeat_check_interval配合使用。表示連接最大允許空閑的時間 'heartbeat_idle_time' => 20, // 打開EOF檢測,此選項將檢測客戶端連接發(fā)來的數(shù)據(jù),當數(shù)據(jù)包結(jié)尾是指定的字符串時才會投遞給Worker進程 // 否則會一直拼接數(shù)據(jù)包,直到超過緩存區(qū)或者超時才會中止。當出錯時底層會認為是惡意連接,丟棄數(shù)據(jù)并強制關(guān)閉連接 'open_eof_check' => true, // 啟用EOF自動分包。當設置open_eof_check后,底層檢測數(shù)據(jù)是否以特定的字符串結(jié)尾來進行數(shù)據(jù)緩沖 'open_eof_split' => true, // 與 open_eof_check 或者 open_eof_split 配合使用,設置EOF字符串。 'package_eof' => "\r\r\n", // 打開包長檢測特性。包長檢測提供了固定包頭+包體這種格式協(xié)議的解析。 // 啟用后,可以保證Worker進程onReceive每次都會收到一個完整的數(shù)據(jù)包。 'open_length_check' => true, // 長度值的類型,接受一個字符參數(shù),與php的 pack 函數(shù)一致。 'package_length_type' => 'N', // 設置長度解析函數(shù),支持C++或PHP的2種類型的函數(shù)。長度函數(shù)必須返回一個整數(shù) 'package_length_func' => 'package_length_func_name' // 設置最大數(shù)據(jù)包尺寸,單位為字節(jié) 'package_max_length' => 2000000, // 啟用CPU親和性設置 'open_cpu_affinity' => 1, // cpu_affinity_ignore 設置將此CPU空出,專門用于處理網(wǎng)絡中斷 'cpu_affinity_ignore' => [0,1], // 啟用open_tcp_nodelay,開啟后TCP連接發(fā)送數(shù)據(jù)時會關(guān)閉Nagle合并算法,立即發(fā)往客戶端連接 'open_tcp_nodelay' => 1, // 啟用tcp_defer_accept特性,可以設置為一個數(shù)值,表示當一個TCP連接有數(shù)據(jù)發(fā)送時才觸發(fā)accept 'tcp_defer_accept' => 5 // 設置SSL隧道加密,設置值為一個文件名字符串,制定cert證書和key私鑰的路徑 'ssl_cert_file' => __DIR__.'/config/ssl.crt', 'ssl_key_file' => __DIR__.'/config/ssl.key', // 設置OpenSSL隧道加密的算法。Server與Client使用的算法必須一致,否則SSL/TLS握手會失敗,連接會被切斷 'ssl_method' => SWOOLE_SSLv3_CLIENT_METHOD, // 啟用SSL后,設置ssl_ciphers來改變openssl默認的加密算法 'ssl_ciphers' => 'ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP', // 設置worker/task子進程的所屬用戶 'user' => 'swoole', // 設置worker/task子進程的進程用戶組 'group' => 'www-data', // 重定向Worker進程的文件系統(tǒng)根目錄 'chroot' => '/data/server/', // 在Server啟動時自動將master進程的PID寫入到文件,在Server關(guān)閉時自動刪除PID文件 'pid_file' => __DIR__.'/server.pid', // 調(diào)整管道通信的內(nèi)存緩存區(qū)長度。Swoole使用Unix Socket實現(xiàn)進程間通信。 'pipe_buffer_size' => 32 * 1024 *1024, // 配置發(fā)送輸出緩存區(qū)內(nèi)存尺寸 'buffer_output_size' => 32 * 1024 *1024 // 配置客戶端連接的緩存區(qū)長度 'socket_buffer_size' => 128 * 1024 *1024 // swoole在配置dispatch_mode=1或3后,因為系統(tǒng)無法保證onConnect/onReceive/onClose的順序,默認關(guān)閉了onConnect/onClose事件。 // 如果應用程序需要onConnect/onClose事件,并且能接受順序問題可能帶來的安全風險, // 可以通過設置enable_unsafe_event為true,啟用onConnect/onClose事件 'enable_unsafe_event' => true, // swoole在配置dispatch_mode=1或3后,系統(tǒng)無法保證onConnect/onReceive/onClose的順序,因此可能會有一些請求數(shù)據(jù)在連接關(guān)閉后, // 才能到達Worker進程。discard_timeout_request配置默認為true,表示如果worker進程收到了已關(guān)閉連接的數(shù)據(jù)請求,將自動丟棄。 // discard_timeout_request如果設置為false,表示無論連接是否關(guān)閉Worker進程都會處理數(shù)據(jù)請求。 'discard_timeout_request' => true, // 設置端口重用 'enable_reuse_port' => true, // 設置此選項為true后,accept客戶端連接后將不會自動加入EventLoop,僅觸發(fā)onConnect回調(diào)。 // worker進程可以調(diào)用$serv->confirm($fd)對連接進行確認,此時才會將fd加入EventLoop開始進行數(shù)據(jù)收發(fā), // 也可以調(diào)用$serv->close($fd)關(guān)閉此連接。 'enable_delay_receive' => true, // 啟用Http協(xié)議處理 'open_http_protocol' => true, // 啟用HTTP2協(xié)議解析,需要依賴--enable-http2編譯選項。默認為false 'open_http2_protocol' => true, // 啟用websocket協(xié)議處理,Swoole\WebSocket\Server會自動啟用此選項 'open_websocket_protocol' => true, // 啟用mqtt協(xié)議處理,啟用后會解析mqtt包頭,worker進程onReceive每次會返回一個完整的mqtt數(shù)據(jù)包 'open_mqtt_protocol' => true, // 設置異步重啟開關(guān) 'reload_async' => true, // 開啟TCP快速握手特性。此項特性,可以提升TCP短連接的響應速度,在客戶端完成握手的第三步,發(fā)送SYN包時攜帶數(shù)據(jù) 'tcp_fastopen' => true // 開啟請求慢日志。啟用后Manager進程會設置一個時鐘信號,定時偵測所有Task和Worker進程, // 一旦進程阻塞導致請求超過規(guī)定的時間,將自動打印進程的PHP函數(shù)調(diào)用棧 'request_slowlog_file' => '/tmp/trace.log', // enable_coroutine參數(shù),默認為true,通過設置為false可關(guān)閉內(nèi)置協(xié)程 'enable_coroutine' => false // 設置當前工作進程最大協(xié)程數(shù)量,超過max_coroutine底層將無法創(chuàng)建新的協(xié)程,底層會拋出錯誤,并直接關(guān)閉連接 'max_coroutine' => 3000, ));
Server 函數(shù)列表
// 創(chuàng)建一個異步Server對象。
$serv = new swoole_server('0.0.0.0', '9501', $mode = SWOOLE_PROCESS, $sock_type = SWOOLE_SOCK_TCP);
// swoole_server->set函數(shù)用于設置swoole_server運行時的各項參數(shù)。
// 服務器啟動后通過$serv->setting來訪問set函數(shù)設置的參數(shù)數(shù)組。
$serv->set(array(
'reactor_num' => 2,
'worker_num' => 4,
'backlog' => 128,
'max_request' => 50,
'dispatch_mode' => 1,
));
// 注冊Server的事件回調(diào)函數(shù)。
$serv->on('connect', function ($serv, $fd){
echo "Client:Connect.\n";
});
// 增加監(jiān)聽的端口。業(yè)務代碼中可以通過調(diào)用swoole_server::connection_info來獲取某個連接來自于哪個端口。
$serv->addlistener("127.0.0.1", 9502, SWOOLE_SOCK_TCP);
// 監(jiān)聽一個新的Server端口,此方法是addlistener的別名
$serv->listen("127.0.0.1", 9503, SWOOLE_SOCK_TCP);
// 添加一個用戶自定義的工作進程。此函數(shù)通常用于創(chuàng)建一個特殊的工作進程,用于監(jiān)控、上報或者其他特殊的任務。
$process = new swoole_process(function($process) use ($server) {
while (true) {
$msg = $process->read();
foreach($server->connections as $conn) {
$server->send($conn, $msg);
}
}
});
$server->addProcess($process);
// 啟動server,監(jiān)聽所有TCP/UDP端口
$serv->start();
// 重啟所有worker進程。$only_reload_taskworkrer 是否僅重啟task進程
$serv->reload($only_reload_taskworkrer = false);
// 使當前worker進程停止運行,并立即觸發(fā)onWorkerStop回調(diào)函數(shù)。
swoole_server->stop(int $worker_id = -1, bool $waitEvent = false);
// 此函數(shù)可以用在worker進程內(nèi)。向主進程發(fā)送SIGTERM也可以實現(xiàn)關(guān)閉服務器。
$serv->shutdown();
// tick定時器,可以自定義回調(diào)函數(shù)。此函數(shù)是swoole_timer_tick的別名。
$serv->tick(1000, function ($id) {
var_dump($id);
});
// 在指定的時間后執(zhí)行函數(shù),swoole_server::after函數(shù)是一個一次性定時器,執(zhí)行完成后就會銷毀
$serv->after(2000, function(){
echo "Timeout: ".microtime(true)."\n";
});
// 延后執(zhí)行一個PHP函數(shù)。Swoole底層會在EventLoop循環(huán)完成后執(zhí)行此函數(shù)。
// 此函數(shù)的目的是為了讓一些PHP代碼延后執(zhí)行,程序優(yōu)先處理IO事件。
$server->defer(function() use ($db) {
$db->close();
});
// 清除tick/after定時器,此函數(shù)是 swoole_timer_clear 的別名。
$timer_id = $server->tick(1000, function ($id) use ($server) {
$server->clearTimer($id);
});
// 關(guān)閉客戶端連接,操作成功返回true,失敗返回false.
$serv->close($fd);
// 向客戶端發(fā)送數(shù)據(jù) $data,發(fā)送的數(shù)據(jù),TCP協(xié)議最大不得超過2M,可修改 buffer_output_size 改變允許發(fā)送的最大包長度
// UDP協(xié)議不得超過65507,UDP包頭占8字節(jié), IP包頭占20字節(jié),65535-28 = 65507
$serv->send($fd, 'Swoole: '.$data);
// 發(fā)送文件到TCP客戶端連接
$serv->sendfile($fd, __DIR__.'/test.jpg');
// 向任意的客戶端IP:PORT發(fā)送UDP數(shù)據(jù)包
$serv->sendto("127.0.0.1", 9999, "hello world");
// 阻塞地向客戶端發(fā)送數(shù)據(jù)
server->sendwait($fd, "hello world");
// 此函數(shù)可以向任意worker進程或者task進程發(fā)送消息。在非主進程和管理進程中可調(diào)用。收到消息的進程會觸發(fā)onPipeMessage事件
$serv->sendMessage("hello task process", $worker_id);
// 檢測fd對應的連接是否存在,$fd對應的TCP連接存在返回true,不存在返回false
$serv->exist($fd)
// 停止接收數(shù)據(jù)。調(diào)用此函數(shù)后會將連接從EventLoop中移除,不再接收客戶端數(shù)據(jù)
$serv->pause($fd)
// 恢復數(shù)據(jù)接收。與pause方法成對使用,調(diào)用此函數(shù)后會將連接重新加入到EventLoop中,繼續(xù)接收客戶端數(shù)據(jù)
$serv->resume(int $fd);
// swoole_server->getClientInfo函數(shù)用來獲取連接的信息,別名是swoole_server->connection_info
$fdinfo = $serv->connection_info($fd);
// 用來遍歷當前Server所有的客戶端連接,方法是基于共享內(nèi)存的,不存在IOWait
// 推薦使用 swoole_server::$connections 迭代器來遍歷連接,getClientList的別名是connection_list
$conn_list = $serv->getClientList($start_fd, 10);
// 將連接綁定一個用戶定義的UID,可以設置dispatch_mode=5設置以此值進行hash固定分配。
// 可以保證某一個UID的連接全部會分配到同一個Worker進程。
$serv->bind($fd, $uid)
// 得到當前Server的活動TCP連接數(shù),啟動時間,accpet/close的總次數(shù)等信息。
$serv_stats = $serv->stats();
// 投遞一個異步任務到task_worker池中。此函數(shù)是非阻塞的,執(zhí)行完畢會立即返回。Worker進程可以繼續(xù)處理新的請求。
// 使用Task功能,必須先設置 task_worker_num,并且必須設置Server的onTask和onFinish事件回調(diào)函數(shù)
$task_id = $serv->task("some data");
// taskwait與task方法作用相同,用于投遞一個異步的任務到task進程池去執(zhí)行。
// 與task不同的是taskwait是同步等待的,直到任務完成或者超時返回。
$serv->taskwait(['type' => 'array', 'value' => $data]);
// 并發(fā)執(zhí)行多個Task,$tasks 必須為數(shù)字索引數(shù)組,不支持關(guān)聯(lián)索引數(shù)組
$tasks[] = mt_rand(1000, 9999);
// 任務1
$tasks[] = mt_rand(1000, 9999);
// 任務2
var_dump($tasks);
// 等待所有Task結(jié)果返回,超時為10s
$results = $serv->taskWaitMulti($tasks, 10.0);
// 并發(fā)執(zhí)行Task并進行協(xié)程調(diào)度
$result = $serv->taskCo($tasks, 0.5);
// 此函數(shù)用于在task進程中通知worker進程,投遞的任務已完成。此函數(shù)可以傳遞結(jié)果數(shù)據(jù)給worker進程。
$serv->finish("response");
// 檢測服務器所有連接,并找出已經(jīng)超過約定時間的連接。
// 如果指定if_close_connection,則自動關(guān)閉超時的連接。未指定僅返回連接的fd數(shù)組。
$closeFdArr = $serv->heartbeat();
// 獲取最近一次操作錯誤的錯誤碼。業(yè)務代碼中可以根據(jù)錯誤碼類型執(zhí)行不同的邏輯。
$errCode = $serv->getLastError();
// 調(diào)用此方法可以得到底層的socket句柄,返回的對象為sockets資源句柄。
// 依賴PHP的sockets擴展,并且編譯swoole時需要開啟--enable-sockets選項
$socket = $serv->getSocket();
// 設置客戶端連接為保護狀態(tài),不被心跳線程切斷。
$serv->protect(int $fd, bool $value = 1);
// 確認連接,與enable_delay_receive或wait_for_bind配合使用。當客戶端建立連接后,并不監(jiān)聽可讀事件。
// 僅觸發(fā)onConnect事件回調(diào)在onConnect回調(diào)中執(zhí)行confirm確認連接,這時服務器才會監(jiān)聽可讀事件,接收來自客戶端連接的數(shù)據(jù)。
$serv->confirm(int $fd);Server 屬性列表
// swoole_server::set()函數(shù)所設置的參數(shù)會保存到swoole_server::$setting屬性上。在回調(diào)函數(shù)中可以訪問運行參數(shù)的值。
echo $serv->setting['worker_num'];
// 返回當前服務器主進程的PID。
int $serv->master_pid;
// 返回當前服務器管理進程的PID。
int $serv->manager_pid;
// 得到當前Worker進程的編號,包括Task進程。Worker進程編號范圍是[0, worker_num]
// Task進程編號范圍是[worker_num, worker_num + task_worker_num]
int $serv->worker_id;
// 得到當前Worker進程的操作系統(tǒng)進程ID。與posix_getpid()的返回值相同。
int $serv->worker_pid;
// 布爾類型,true表示當前的進程是Task工作進程,false表示當前的進程是Worker進程
bool $serv->taskworker;
// TCP連接迭代器,可以使用foreach遍歷服務器當前所有的連接,
// 此屬性的功能與swoole_server->connnection_list是一致的,但是更加友好。遍歷的元素為單個連接的fd。
// 監(jiān)聽端口數(shù)組,如果服務器監(jiān)聽了多個端口可以遍歷swoole_server::$ports得到所有Swoole\Server\Port對象。
// 其中swoole_server::$ports[0]為構(gòu)造方法所設置的主服務器端口。
$ports = swoole_server::$ports;
$ports[0]->set($settings);
$ports[1]->on("Receive", function(){});事件回調(diào)函數(shù)
// Server啟動在主進程的主線程回調(diào)此函數(shù)
$serv->on('Start', function(Swoole\Server $server){});
// 此事件在Server正常結(jié)束時發(fā)生
$serv->on('Shutdown', function(Swoole\Server $server){});
// 此事件在Worker進程/Task進程啟動時發(fā)生
$serv->on('WorkerStart', function(Swoole\Server $server, int $worker_id){});
// 此事件在worker進程終止時發(fā)生
$serv->on('WorkerStop', function(Swoole\Server $server, int $worker_id){});
// 僅在開啟reload_async特性后有效會先創(chuàng)建新的Worker進程處理新請求,舊的Worker進程自行退出。
$serv->on('WorkerExit', function(Swoole\Server $server, int $worker_id){});
// 有新的連接進入時,在worker進程中回調(diào)
$serv->on('Connect', function(Swoole\Server $server, int $fd, int $reactorId){});
// 接收到數(shù)據(jù)時回調(diào)此函數(shù),發(fā)生在worker進程中
$serv->on('Receive', function(Swoole\Server $server, int $fd, int $reactor_id, string $data){});
// 接收到UDP數(shù)據(jù)包時回調(diào)此函數(shù),發(fā)生在worker進程中
$serv->on('Packet', function(Swoole\Server $server, string $data, array $client_info){});
// TCP客戶端連接關(guān)閉后,在worker進程中回調(diào)此函數(shù)
$serv->on('Close', function(Swoole\Server $server, int $fd, int $reactorId){});
// 當緩存區(qū)達到最高水位時觸發(fā)此事件。
$serv->on('BufferFull', function(Swoole\Server $serv, int $fd){});
// 當緩存區(qū)低于最低水位線時觸發(fā)此事件
$serv->on('BufferEmpty', function(Swoole\Server $serv, int $fd){});
// 在task_worker進程內(nèi)被調(diào)用。worker進程可以使用swoole_server_task函數(shù)向task_worker進程投遞新的任務。
// 當前的Task進程在調(diào)用onTask回調(diào)函數(shù)時會將進程狀態(tài)切換為忙碌,這時將不再接收新的Task,
// 當onTask函數(shù)返回時會將進程狀態(tài)切換為空閑然后繼續(xù)接收新的Task。
$serv->on('Task', function(Swoole\Server $serv, int $task_id, int $src_worker_id, mixed $data){});
// 當worker進程投遞的任務在task_worker中完成時,
// task進程會通過swoole_server->finish()方法將任務處理的結(jié)果發(fā)送給worker進程
$serv->on('Finish', function(Swoole\Server $serv, int $task_id, string $data){});
// 當工作進程收到由 sendMessage 發(fā)送的管道消息時會觸發(fā)onPipeMessage事件。worker/task進程都可能會觸發(fā)onPipeMessage事件
$serv->on('PipeMessage', function(Swoole\Server $server, int $src_worker_id, mixed $message){});
// 當worker/task_worker進程發(fā)生異常后會在Manager進程內(nèi)回調(diào)此函數(shù)
$serv->on('WorkerError', function(Swoole\Server $serv, int $worker_id, int $worker_pid, int $exit_code, int $signal){});
// 當管理進程啟動時調(diào)用它
$serv->on('ManagerStart', function(Swoole\Server $serv){});
// 當管理進程結(jié)束時調(diào)用它
$serv->on('ManagerStop', function(Swoole\Server $serv){});相關(guān)文章
php實現(xiàn)購物車功能(以大蘋果購物網(wǎng)為例)
本文主要介紹了php實現(xiàn)購物車功能(以大蘋果購物網(wǎng)為例)的實現(xiàn)方法,具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03
php實現(xiàn)阿拉伯數(shù)字和羅馬數(shù)字相互轉(zhuǎn)換的方法
這篇文章主要介紹了php實現(xiàn)阿拉伯數(shù)字和羅馬數(shù)字相互轉(zhuǎn)換的方法,涉及php字符串操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-04-04
php curl批處理實現(xiàn)可控并發(fā)異步操作示例
這篇文章主要介紹了php curl批處理實現(xiàn)可控并發(fā)異步操作,結(jié)合實例形式分析了php使用curl的curl_multi_*族函數(shù)進行并發(fā)操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2018-05-05
php站內(nèi)搜索關(guān)鍵詞變亮的實現(xiàn)方法
這篇文章主要介紹了php站內(nèi)搜索關(guān)鍵詞變亮的實現(xiàn)方法,以實例形式較為詳細的分析了數(shù)據(jù)庫表的創(chuàng)建及針對數(shù)據(jù)庫的搜索關(guān)鍵字高亮的實現(xiàn)技巧,非常具有實用價值,需要的朋友可以參考下2014-12-12

