\Co

Class Co Coroutine的短名API

Summary

Methods
Properties
Constants
set()
create()
resume()
suspend()
getuid()
call_user_func_array()
call_user_func()
getHostByName()
fread()
fwrite()
sleep()
readFile()
writeFile()
exec()
getAddrInfo()
No public properties found
No constants found
No protected methods found
No protected properties found
N/A
No private methods found
No private properties found
N/A

Methods

set()

set(array  $options) 

max_coroutine 设置最大协程数,超过限制后底层将无法创建新的协程。

stack_size 设置单个协程初始栈的内存尺寸,默认为8192

Parameters

array $options

create()

create(callable  $function) : boolean

创建一个新的协程,并立即执行

Parameters

callable $function

协程执行的代码

Returns

boolean

resume()

resume(string  $coroutineId) 

恢复某个协程,使其继续运行 当前协程处于挂起状态时,另外的协程中可以使用resume再次唤醒当前协程

Parameters

string $coroutineId

为要恢复的协程ID,在协程内可以使用getuid获取到协程的ID

suspend()

suspend(string  $corouindId) 

挂起当前协程

Parameters

string $corouindId

要挂起协程的ID

getuid()

getuid() : integer

获取当前协程的唯一id 返回值: * 成功时返回当前协程ID(int) * 如果当前不在协程环境中,则返回-1

Returns

integer

call_user_func_array()

call_user_func_array(callable  $callback, array  $param_arr) : mixed

协程版反射调用函数

Parameters

callable $callback
array $param_arr

Returns

mixed

call_user_func()

call_user_func(callable  $callback, null  $parameter = null, null  $_ = null) : mixed

协程版反射调用函数

Parameters

callable $callback
null $parameter

[optional]

null $_

[optional]

Returns

mixed

getHostByName()

getHostByName(string  $domain, integer  $family = AF_INET) : string

根据主机名获取IP地址

Parameters

string $domain
integer $family

Returns

string

fread()

fread(integer  $fp) : string

读文件,从fopen打开的句柄中

Parameters

integer $fp

Returns

string

fwrite()

fwrite(resource  $handle, string  $data, integer  $length) : integer

协程方式向文件写入数据。

$handle文件句柄,必须是fopen打开的文件类型stream资源 $data要写入的数据内容,可以是文本或二进制数据 $length写入的长度,默认为0,表示写入$data的全部内容,$length必须小于$data的长度

Parameters

resource $handle
string $data
integer $length

Returns

integer —

写入成功返回数据长度,失败返回false

sleep()

sleep(float  $seconds) 

进入等待状态。相当于PHP的sleep函数, 不同的是Coroutine::sleep是协程调度器实现的, 底层会yield当前协程,让出时间片,并添加一个异步定时器, 当超时时间到达时重新resume当前协程,恢复运行。 使用sleep接口可以方便地实现超时等待功能。

Parameters

float $seconds

必须大于0,最大不得超过一天时间(86400秒)

readFile()

readFile(string  $filename) : string|boolean

协程方式读取文件。

需要2.1.2或更高版本

参数 $filename文件名 返回值 读取成功返回字符串内容,读取失败返回false readFile方法没有尺寸限制,读取的内容会存放在内存中,因此读取超大文件时可能会占用过多内存

Parameters

string $filename

Returns

string|boolean

writeFile()

writeFile(string  $filename, string  $fileContent, integer  $flags) : boolean

协程方式写入文件。

需要2.1.2或更高版本

参数 $filename为文件的名称,必须有可写权限,文件不存在会自动创建。打开文件失败会立即返回false $fileContent为要写入到文件的内容,最大可写入4M $flags为写入的选项,可以使用FILE_APPEND表示追加到文件末尾,默认会清空当前文件内容

返回值 写入成功返回true,写入失败返回false

Parameters

string $filename
string $fileContent
integer $flags

Returns

boolean

exec()

exec(string  $cmd) : array|boolean

执行一条shell指令。底层自动进行协程调度。

参数 $cmd 要执行的shell指令

返回值 执行失败返回false,执行成功返回数组,包含了进程退出的状态码、信号、输出内容。

array( 'code' => 0, 'signal' => 0, 'output' => '', ); 使用实例 go(function() { $ret = Co::exec("md5sum ".FILE); });

Parameters

string $cmd

Returns

array|boolean

getAddrInfo()

getAddrInfo(string  $domain, integer  $family = AF_INET, integer  $socktype = SOCK_STREAM, integer  $protocol = STREAM_IPPROTO_TCP, string|null  $service = null) : array|boolean

进行DNS解析,查询域名对应的IP地址,与gethostbyname不同,getaddrinfo支持更多参数设置,而且会返回多个IP结果。

$domain 域名,如www.baidu.com $family 默认为AF_INET表示返回IPv4地址,使用AF_INET6时返回IPv6地址 其他参数设置请参考man getaddrinfo 文档 成功返回多个IP地址组成的数组,失败返回false

Parameters

string $domain
integer $family
integer $socktype
integer $protocol
string|null $service

Returns

array|boolean