Swoole server函數列表(轉載)


swoole_server::__construct

功能描述:建立一個swoole_server資源對象
函數原型:php

// 類成員函數
public function swoole_server::__construct(string $host, int $port, int $mode = SWOOLE_PROCESS,  int $sock_type = SWOOLE_SOCK_TCP); // 公共函數 function swoole_server_create(string $host, int $port, int $mode = SWOOLE_PROCESS,  int $sock_type = SWOOLE_SOCK_TCP);

返回:一個swoole_server對象
參數說明:html

參數 說明
string host 監聽的IP地址
int port 監聽的端口號
int mode 運行模式
int sock_type 指定的socket類型

說明: host、port、socket_type的詳細說明見swoole_server::addlistener
mode指定了swoole_server的運行模式,共有以下三種:mysql

mode 類型 說明
SWOOLE_BASE Base模式 傳統的異步非阻塞Server。在Reactor內直接回調PHP的函數。若是回調函數中有阻塞操做會致使Server退化爲同步模式。worker_num參數對與BASE模式仍然有效,swoole會啓動多個Reactor進程
SWOOLE_THREAD 線程模式(已廢棄) 多線程Worker模式,Reactor線程來處理網絡事件輪詢,讀取數據。獲得的請求交給Worker線程去處理。多線程模式比進程模式輕量一些,並且線程之間能夠共享堆棧和資源。 訪問共享內存時會有同步問題,須要使用Swoole提供的鎖機制來保護數據。
SWOOLE_PROCESS 進程模式(默認) Swoole提供了完善的進程管理、內存保護機制。 在業務邏輯很是複雜的狀況下,也能夠長期穩定運行,適合業務邏輯很是複雜的場景。

樣例:git

$serv = new swoole_server("127.0.0.1" , 8888 , SWOOLE_PROCESS , SWOOLE_SOCK_TCP);

swoole_server::set

功能描述:設置swoole_server運行時的各項參數
函數原型:github

// 類成員函數
public function swoole_server::set(array $setting); // 公共函數 function swoole_server_set(swoole_server $server, array $setting);

返回:無
參數說明:sql

參數 說明
array setting 配置選項數組,採用key-value形式

說明:
該函數必須在swoole_server::start函數調用前調用。
所有swoole_server的配置參數點此查看
樣例:數組

$serv->set(  array(  'worker_num' => 8,  'max_request' => 10000,  'max_conn' => 100000,  'dispatch_mode' => 2,  'debug_mode'=> 1,  'daemonize' => false,  ) );

swoole_server::on

功能描述:綁定swoole_server的相關回調函數
函數原型:服務器

// 類成員函數
public function bool swoole_server->on(string $event, mixed $callback);

返回:設置成功返回true,不然返回false
參數說明:swoole

參數 說明
string event 回調的名稱(大小寫不敏感)
mixed callback 回調的PHP函數,能夠是函數名的字符串,類靜態方法,對象方法數組,匿名函數

說明:
該函數必須在swoole_server::start函數調用前調用。
此方法與swoole_server::handler功能相同,做用是與swoole_client風格保持一致。
swoole_server::on中事件名稱字符串不要加on。
所有的回調函數列表點此查看
樣例:網絡

$serv->on('connect', function ($serv, $fd){  echo "Client:Connect.\n"; }); $serv->on('receive', array( $myclass, 'onReceive' ) ); // onReceive是myclass的成員函數

swoole_server::addlistener

功能描述:給swoole_server增長一個監聽的地址和端口
函數原型:

// 類成員函數
public function swoole_server::addlistener(string $host, int $port, $type = SWOOLE_SOCK_TCP); // 公共函數 function swoole_server_addlisten(swoole_server $serv, string $host, int $port, $type = SWOOLE_SOCK_TCP);

返回:無
參數說明:

參數 說明
string host 監聽的IP地址
int port 監聽的端口號
int sock_type 指定的socket類型

說明: swoole支持以下socket類型:

sock_type 說明
SWOOLE_TCP/SWOOLE_SOCK_TCP TCP IPv4 Socket
SWOOLE_TCP6/SWOOLE_SOCK_TCP6 TCP IPv6 Socket
SWOOLE_UDP/SWOOLE_SOCK_UDP UDP IPv4 Socket
SWOOLE_UDP6/SWOOLE_SOCK_UDP6 UDP IPv4 Socket
SWOOLE_UNIX_DGRAM Unix UDP Socket
SWOOLE_UNIX_STREAM Unix TCP Socket

Unix Socket僅在1.7.1+後可用,此模式下host參數必須填寫可訪問的文件路徑,port參數忽略
Unix Socket模式下,客戶端fd將再也不是數字,而是一個文件路徑的字符串
SWOOLE_TCP等是1.7.0+後提供的簡寫方式,與1.7.0前的SWOOLE_SOCK_TCP是等同的

樣例:

$serv->addlistener("127.0.0.1", 9502, SWOOLE_SOCK_TCP); $serv->addlistener("192.168.1.100", 9503, SWOOLE_SOCK_TCP); $serv->addlistener("0.0.0.0", 9504, SWOOLE_SOCK_UDP); $serv->addlistener("/var/run/myserv.sock", 0, SWOOLE_UNIX_STREAM);  swoole_server_addlisten($serv, "127.0.0.1", 9502, SWOOLE_SOCK_TCP);

swoole_server::handler

功能描述:設置Server的事件回調函數
函數原型:

// 類成員函數
public function swoole_server::handler(string $event_name, mixed $event_callback_function); // 公共函數 function swoole_server_handler(swoole_server $serv, string $event_name, mixed $event_callback_function);

返回:設置成功返回true,不然返回false
參數說明:

參數 說明
string event_name 回調的名稱(大小寫不敏感)
mixed event_callback_function 回調的PHP函數,能夠是函數名的字符串,類靜態方法,對象方法數組,匿名函數

說明: 該函數必須在swoole_server::start函數調用前調用。
事件名稱字符串要加on。
所有的回調函數列表點此查看

onConnect/onClose/onReceive這3個回調函數必須設置。其餘事件回調函數可選
若是設定了timer定時器,onTimer事件回調函數也必須設置
若是啓用了task_worker,onTask/onFinish事件回調函數必須設置

樣例:

$serv->handler('onStart', 'my_onStart'); $serv->handler('onStart', array($this, 'my_onStart')); $serv->handler('onStart', 'myClass::onStart');

swoole_server::start

功能描述:啓動server,開始監聽全部TCP/UDP端口
函數原型:

// 類成員函數
public function swoole_server::start()

返回:啓動成功返回true,不然返回false
參數說明:無
說明:
啓動成功後會建立worker_num+2個進程:Master進程+Manager進程+worker_num 個 Worker進程。
另外。啓用task_worker會增長task_worker_num個Worker進程
三種進程的說明以下:

進程類型 說明
Master進程 主進程內有多個Reactor線程,基於epoll/kqueue進行網絡事件輪詢。收到數據後轉發到Worker進程去處理
Manager進程 對全部Worker進程進行管理,Worker進程生命週期結束或者發生異常時自動回收,並建立新的Worker進程
Worker進程 對收到的數據進行處理,包括協議解析和響應請求

樣例:

$serv->start();

swoole_server::reload

功能描述:重啓全部worker進程。
函數原型:

// 類成員函數
public function swoole_server::reload()

返回:調用成功返回true,不然返回false
參數說明:無
說明:
調用後會向Manager發送一個SIGUSR1信號,平滑重啓所有的Worker進程(所謂平滑重啓,是指重啓動做會在Worker處理完正在執行的任務後發生,並不會中斷正在運行的任務。)

小技巧:在onWorkerStart回調中require相應的php文件,當這些文件被修改後,只須要經過SIGUSR1信號便可實現服務器熱更新。

1.7.7版本增長了僅重啓task_worker的功能。只需向服務器發送SIGUSR2便可
樣例:

$serv->reload();

swoole_server::shutdown

功能描述:關閉服務器。
函數原型:

// 類成員函數
public function swoole_server::shutdown()

返回:調用成功返回true,不然返回false
參數說明:無
說明:
此函數能夠用在worker進程內,平滑關閉所有的Worker進程。
也可向Master進程發送SIGTERM信號關閉服務器。
樣例:

$serv->shutdown();

swoole_server::addtimer

功能描述:設置一個固定間隔的定時器
函數原型:

// 類成員函數
public function swoole_server::addtimer(int $interval); // 公共函數 function swoole_server_addtimer(swoole_server $serv, int $interval);

返回:設置成功返回true,不然返回false
參數說明:

參數 說明
int interval 定時器的時間間隔,單位爲毫秒ms

說明:
swoole定時器的最小顆粒是1毫秒,支持多個不一樣間隔的定時器。
注意不能存在2個相同間隔時間的定時器。
使用多個定時器時,其餘定時器必須爲最小定時器時間間隔的整數倍。

該函數只能在onWorkerStart/onConnect/onReceive/onClose回調函數中調用。
增長定時器後須要爲Server設置onTimer回調函數,不然Server將沒法啓動。

樣例:

$serv->addtimer(1000); //1s swoole_server_addtimer($serv,20); //20ms

swoole_server::deltimer

功能描述:刪除指定的定時器。
函數原型:

// 類成員函數
public function swoole_server::deltimer(int $interval);

返回:無
參數說明:

參數 說明
int interval 定時器的時間間隔,單位爲毫秒ms

說明:
刪除間隔爲interval的定時器

樣例:

$serv->deltimer(1000);

swoole_server::after

功能描述:在指定的時間後執行函數
函數原型:

// 類成員函數
public function swoole_server::after(int $after_time_ms, mixed $callback_function, mixed params); // 公共函數 function swoole_timer_after(swoole_server $serv, int $after_time_ms, mixed $callback_function, mixed params);

返回:無
參數說明:

參數 說明
int after_time_ms 指定時間,單位爲毫秒ms
mixed callback_function 指定的回調函數
mixed params 指定的回調函數的參數

說明:
建立一個一次性定時器,在指定的after_time_ms時間後調用callback_funciton回調函數,執行完成後就會銷燬。
callback_function函數的參數爲指定的params
須要swoole-1.7.7以上版本。

樣例:

$serv->after(1000, function( $params ){  echo "Do something\n"; } , "data" );

swoole_server::close

功能描述:關閉客戶端鏈接
函數原型:

// 類成員函數
public function swoole_server::close(int $fd, int $from_id = 0);

返回:關閉成功返回true,失敗返回false
參數說明:

參數 說明
int fd 指定關閉的fd
int from_id fd來自於哪一個Reactor(swoole-1.6之後已廢棄該參數)

說明:
調用close關閉鏈接後,鏈接並不會立刻關閉,所以不要在close以後當即寫清理邏輯,而是應該在onClose回調中處理

樣例:

$serv->close( $fd );

swoole_server::send

功能描述:向客戶端發送數據
函數原型:

// 類成員函數
public function swoole_server::send(int $fd, string $data, int $from_id = 0);

返回:發送成功返回true,失敗返回false
參數說明:

參數 說明
int fd 指定發送的fd
string data 發送的數據
int from_id fd來自於哪一個Reactor

說明:

  • data,發送的數據,最大不得超過2M。send操做具備原子性,多個進程同時調用send向同一個鏈接發送數據,不會發生數據混雜。
  • 若是要發送超過2M的數據,建議將數據寫入臨時文件,而後經過sendfile接口直接發送文件
  • UDP協議,send會直接在worker進程內發送數據包
  • 向UDP客戶端發送數據,必需要傳入from_id
  • 發送成功會返回true,若是鏈接已被關閉或發送失敗會返回false
  • swoole-1.6以上版本不須要from_id
  • UDP協議使用fd保存客戶端IP,from_id保存from_fd和port
  • UDP協議若是是在onReceive後當即向客戶端發送數據,能夠不傳from_id

樣例:

$serv->send( $fd , "Hello World");

swoole_server::sendfile

功能描述:發送文件到TCP客戶端鏈接
函數原型:

// 類成員函數
public function swoole_server::sendfile(int $fd, string $filename);

返回:發送成功返回true,失敗返回false
參數說明:

參數 說明
int fd 指定發送的fd
string filename 發送的文件名

說明:
sendfile函數調用OS提供的sendfile系統調用,由操做系統直接讀取文件並寫入socket。sendfile只有2次內存拷貝,使用此函數能夠下降發送大量文件時操做系統的CPU和內存佔用。

樣例:

$serv->sendfile($fd, __DIR__.'/test.jpg');

swoole_server::connection_info

功能描述:獲取鏈接的信息
函數原型:

// 類成員函數
public function swoole_server::connection_info(int $fd, int $from_id = 0);

返回:若是fd存在,返回一個數組,鏈接不存在或已關閉返回false
參數說明:

參數 說明
int fd 指定發送的fd
int from_id 來自於哪一個Reactor

說明:
UDP socket調用該參數時必須傳入from_id.
返回的結果以下:

名稱 說明
int from_id 來自於哪一個Reactor
int from_fd 來自哪一個Server Socket
int from_port 來自哪一個Server端口
int remote_port 客戶端鏈接的端口
string remote_ip 客戶端鏈接的ip
int connect_time 鏈接到Server的時間,單位秒
int last_time 最後一次發送數據的時間,單位秒

sendfile函數調用OS提供的sendfile系統調用,由操做系統直接讀取文件並寫入socket。sendfile只有2次內存拷貝,使用此函數能夠下降發送大量文件時操做系統的CPU和內存佔用。

樣例:

$fdinfo = $serv->connection_info($fd); $udp_client = $serv->connection_info($fd, $from_id);

swoole_server::connection_list

功能描述:遍歷當前Server的所有客戶端鏈接
函數原型:

// 類成員函數
public function swoole_server::connection_list(int $start_fd = 0, int $pagesize = 10);

返回:調用成功將返回一個數字索引數組,元素是取到的fd。數組會按從小到大排序。最後一個fd做爲新的start_fd再次嘗試獲取。
調用失敗返回false
參數說明:

參數 說明
int start_fd 起始fd
int pagesize 每頁取多少條,最大不得超過100.

說明:
connection_list僅可用於TCP,UDP服務器須要自行保存客戶端信息

樣例:

$start_fd = 0; while(true) {  $conn_list = $serv->connection_list($start_fd, 10);  if($conn_list===false)  {  echo "finish\n";  break;  }  $start_fd = end($conn_list);  var_dump($conn_list);  foreach($conn_list as $fd)  {  $serv->send($fd, "broadcast");  } }

swoole_server::stats

功能描述:獲取當前Server的活動TCP鏈接數,啓動時間,accpet/close的總次數等信息。
函數原型:

// 類成員函數
public function swoole_server->stats();

返回:結果數組
參數說明:無
說明:
stats方法在1.7.5+後可用

名稱 說明
int start_time 啓動時間
int connection_num 當前的鏈接數
int accept_count accept總次數
int close_count close鏈接的總數

樣例:

$status = $serv->stats();

swoole_server::task

功能描述:投遞一個異步任務到task_worker池中
函數原型:

// 類成員函數
public function swoole_server::task(string $data, int $dst_worker_id = -1);

返回:調用成功返回task_worker_id,失敗返回false
參數說明:

參數 說明
string data task數據
int dst_worker_id 指定投遞給哪一個task進程,默認隨機投遞

說明:
此功能用於將慢速的任務異步地去執行,調用task函數會當即返回,Worker進程能夠繼續處理新的請求。
函數會返回一個$task_id數字,表示此任務的ID
任務完成後,能夠經過return(低於swoole-1.7.2版本使用finish函數)將結果經過onFinish回調返回給Worker進程。
發送的data必須爲字符串,若是是數組或對象,請在業務代碼中進行serialize處理,並在onTask/onFinish中進行unserialize。
data能夠爲二進制數據,最大長度爲8K(超過8K可使用臨時文件共享)。字符串可使用gzip進行壓縮。
使用task必須爲Server設置onTaskonFinish回調,並指定task_worker_num配置參數。

樣例:

$task_id = $serv->task("some data");

swoole_server::taskwait

功能描述:投遞一個同步任務到task_worker池中
函數原型:

// 類成員函數
public function swoole_server::taskwait(string $task_data, float $timeout = 0.5, int $dst_worker_id = -1);

返回:task執行的結果
參數說明:

參數 說明
string data task數據
float timeout 超時時間
int dst_worker_id 指定投遞給哪一個task進程,默認隨機投遞

說明:
taskwait與task方法做用相同,用於投遞一個異步的任務到task進程池去執行。與task不一樣的是taskwait是阻塞等待的,直到任務完成或者超時返回。
任務完成後,能夠經過return直接返回結果

樣例:

$task_id = $serv->taskwait("some data", 30);

swoole_server::finish

功能描述:傳遞Task結果數據給worker進程
函數原型:

// 類成員函數
public function swoole_server::finish(string $task_data);

返回:無
參數說明:

參數 說明
string data 結果數據

說明:
使用swoole_server::finish函數必須爲Server設置onFinish回調函數。此函數只可用於Task Worker進程的onTask回調中
swoole_server::finish是可選的。若是Worker進程不關心任務執行的結果,能夠不調用此函數
此函數在swoole-1.7.2以上版本已廢棄,使用return代替。
樣例:

$serv->finish("result data");

swoole_server::heartbeat

功能描述:進行心跳檢測
函數原型:

// 類成員函數
public function swoole_server::heartbeat(bool $if_close_connection = true);

返回:無
參數說明:

參數 說明
bool if_close_connection 是否關閉超時的鏈接,默認爲true

說明:
該函數會主動發起一次檢測,遍歷所有鏈接,根據設置的heartbeat_check_intervalheartbeat_idle_time參數,找到那些處於idle閒置狀態的鏈接
swoole默認會直接關閉這些鏈接,heartbeat會返回這些鏈接的fd
若是if_close_connection爲false,則heartbeat會返回這些idle鏈接的fd,但不會關閉這些鏈接
if_close_connection參數 在swoole-1.7.4以上版本可用
樣例:

$serv->heartbeat();

swoole_get_mysqli_sock

功能描述:獲取mysqli的socket文件描述符
函數原型:

// 公共函數
int swoole_get_mysqli_sock(mysqli $db)

返回:mysqli的fd
參數說明:

參數 說明
mysqli db mysqli的鏈接

說明:
可將mysql的socket增長到swoole中,執行異步MySQL查詢。若是想要使用異步MySQL,須要在編譯swoole時制定--enable-async-mysql
swoole_get_mysqli_sock僅支持mysqlnd驅動
即便是異步MySQL也須要一個鏈接池,併發SQL必須有多個鏈接。
樣例:

$db = new mysqli; $db->connect('127.0.0.1', 'root', 'root', 'test'); $db->query("show tables", MYSQLI_ASYNC); swoole_event_add(swoole_get_mysqli_sock($db), function($db_sock) {  global $db;  $res = $db->reap_async_query();  var_dump($res->fetch_all(MYSQLI_ASSOC));  swoole_event_exit(); });

swoole_set_process_name

功能描述:設置進程的名稱
函數原型:

// 公共函數
void swoole_set_process_name(string $name);

返回:無
參數說明:

參數 說明
string name 進程名稱

說明:
修改進程名稱後,經過ps命令看到的將再也不是php your_file.php,而是設定的字符串

在swoole_server_create以前修改成manager進程名稱 onStart調用時修改成主進程名稱 onWorkerStart修改成worker進程名稱

swoole_set_process_name存在兼容性問題,優先使用PHP內置的cli_set_process_title函數
樣例:

woole_set_process_name("swoole server");

swoole_version

功能描述:獲取swoole擴展的版本號
函數原型:

// 公共函數
string swoole_version();

返回:swoole擴展的版本號
參數說明:無
說明:
樣例:

echo swoole_version();

swoole_strerror

功能描述:將標準的Unix Errno錯誤碼轉換成錯誤信息
函數原型:

// 公共函數
string swoole_strerror(int $errno);

返回:轉化後的錯誤信息
參數說明:

參數 說明
int errno errno錯誤碼

說明:
樣例:

echo swoole_strerror( $errno );

swoole_errno

功能描述:獲取最近一次系統調用的錯誤碼
函數原型:

// 公共函數
int swoole_errno();

返回:最近一次系統調用的錯誤碼
參數說明:無
說明:
錯誤碼的值與操做系統有關。但是使用swoole_strerror將錯誤轉換爲錯誤信息。
樣例:

echo swoole_strerror(swoole_errno());

swoole_get_local_ip

功能描述:此函數用於獲取本機全部網絡接口的IP地址
函數原型:

// 公共函數
array swoole_get_local_ip();

返回:以interface名稱爲key的關聯數組
參數說明:無
說明:
目前只返回IPv4地址,返回結果會過濾掉本地loop地址127.0.0.1
返回結果樣例array("eth0" => "192.168.1.100"); 樣例:

var_dump(swoole_get_local_ip());
相關文章
相關標籤/搜索