三十三、Swoole 基础学习笔记 - Swoole 系统 API

作者: 温新

分类: 【Swoole 系列】

阅读: 704

时间: 2023-03-13 12:20:15

hi,我是温新,一名PHPer

文章基于 Swoole 5.0.1 版本编写。

学习目标:了解系统 API

说明:本篇文章结合官方文档编写及参考网络资料编写,虽非全部原创,但也是结合了自己的理解,若转载请附带本文 URL,编写不易,持续编写更不易,谢谢!

Coroutine\System 系统相关 API 的协程封装。大部分 API 基于 AIO 线程池实现。

官方推荐使用Co\System::sleepSwoole\Coroutine\System::sleep

statvfs

含义:获取文件系统信息。

语法:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">statvfs</span>(<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">string</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$path</span>): <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">array</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">false</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 参数</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$path</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:文件系统挂载的目录【如</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">,可以使用</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">df</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">和</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">mount</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">l</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">命令获取】</span></span>

案例:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\run</span>(<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> () {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">print_r</span>(<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">statvfs</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'/usr/local/src'</span>));</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span>

输出结果:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$php</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">33</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">swoole</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">system</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">api</span>.<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">php</span> </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Array</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    [<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">bsize</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">4096</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    [<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">frsize</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">4096</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    [<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">blocks</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">51328506</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    [<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">bfree</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">41599890</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    [<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">bavail</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">38974354</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    [<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">files</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">13107200</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    [<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">ffree</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">12521751</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    [<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">favail</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">12521751</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    [<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">fsid</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3942528374396710653</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    [<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">flag</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">4096</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    [<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">namemax</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">255</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">)</span>

fwrite

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

语法:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">fwrite</span>(<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">resource</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$handle</span>, <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">string</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$data</span>, <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">int</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$length</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>): <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">int</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">false</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 参数</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$handle</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:文件句柄【必须是</span> <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">fopen</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">打开的文件类型</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">stream</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">资源】</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$data</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:要写入的数据内容【可以是文本或二进制数据】</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$length</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:读取的长度【默认为</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">,表示写入</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$data</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">的全部内容,$length</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">必须小于</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$data</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">的长度】</span></span>

案例:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fp</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">fopen</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'test.txt'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'a+'</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\run</span>(<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> () <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">use</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fp</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$result</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">fwrite</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fp</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'我叫王美丽'</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">var_dump</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$result</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">fclose</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fp</span>);</span>

fread

含义:协程方式读取文件。

语法:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">fread</span>(<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">resource</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$handle</span>, <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">int</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$length</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>): <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">string</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">false</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 参数</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$handle</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:文件句柄【必须是</span> <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">fopen</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">打开的文件类型</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">stream</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">资源】</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$length</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:读取的长度【默认为</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">,表示读取文件的全部内容】</span></span>

返回值:读取成功返回字符串内容,读取失败返回 false

案例:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fp</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">fopen</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'test.txt'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'r'</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\run</span>(<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> () <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">use</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fp</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$result</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">fread</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fp</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 读取的长度为字节</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// $result = Swoole\Coroutine\System::fread($fp, 3);</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">var_dump</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$result</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">fclose</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fp</span>);</span>

fgets

含义:协程方式按行读取文件内容。

说明:底层使用了 php_stream 缓存区,默认大小为 8192 字节,可使用 stream_set_chunk_size 设置缓存区尺寸。

语法:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">fgets</span>(<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">resource</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$handle</span>): <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">string</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">false</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 返回值</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">读取到</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">EOL(\r</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">或</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">\n)将返回一行数据,包括</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">EOL;</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">未读取到</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">EOL,但内容长度超过</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">php_stream</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">缓存区</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">8192</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">字节,将返回</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">8192</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">字节的数据,不包含</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">EOL;</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">达到文件末尾</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">EOF</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">时,返回空字符串,可用</span> <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">feof</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">判断文件是否已读完;</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">取失败返回</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">false。</span></span>

案例

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fp</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">fopen</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'test.txt'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'r'</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\run</span>(<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> () <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">use</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fp</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">while</span> (<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">!</span><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">feof</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fp</span>)) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">echo</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">fgets</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fp</span>) . <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">PHP_EOL</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    } </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">fclose</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fp</span>);</span>

readFile

含义:协程方式读取一个文件的内容。

语法:Swoole\Coroutine\System::readFile(string $filename): string|false

案例:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$file</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'test.txt'</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\run</span>(<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> () <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">use</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$file</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$result</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">readFile</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$file</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">print_r</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$result</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$content</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">readFile</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'test.txt'</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">print_r</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$content</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span>

writeFiel

含义:协程方式写入文件。

语法:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">writeFile</span>(<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">string</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$filename</span>, <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">string</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fileContent</span>, <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">int</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$flags</span>): <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">bool</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 参数</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$filename</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:文件名【必须有可写权限,文件不存在会自动创建。打开文件失败会立即返回</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">false】</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$fileContent</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:写入到文件的内容【最大可写入</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">4</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">M】</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$flags</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:写入的选项【默认会清空当前文件内容,可以使用</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">FILE_APPEND</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">表示追加到文件末尾】</span></span>

案例:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\run</span>(<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> () {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$content</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">writeFile</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'baidu.txt'</span>, <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">file_get_contents</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'https://www.baidu.com'</span>));</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">var_dump</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$content</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span>

sleep

含义:进入等待状态。

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

语法:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">sleep</span>(<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">float</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$seconds</span>): <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">void</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 参数</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$seconds</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:睡眠的时间【必须大于</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">,最大不得超过一天时间(86400</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">秒)】</span></span>

exec

含义:执行一条 sheel 指令。底层自动进行协程调度。

语法:Swoole\Coroutine\System::exec(string $cmd): array

案例:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\run</span>(<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span>() {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$ret</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">exec</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'ls'</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">print_r</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$ret</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span>

gethostbyname

含义:将域名解析为 IP。

语法:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">gethostbyname</span>(<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">string</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$domain</span>, <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">int</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$family</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">AF_INET</span>, <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">float</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$timeout</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>): <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">string</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">false</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 参数</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$domain</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:域名</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$family</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:域族</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$timeout</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:超时时间</span></span>

案例:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\run</span>(<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span>() {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$ip</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">gethostbyname</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'www.baidu.com'</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">var_dump</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$ip</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span>

输出结果:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$php</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">33</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">swoole</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">system</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">api</span>.<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">php</span> </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">string</span>(<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">13</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"14.215.177.38"</span></span>

getaddrinfo

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

语法:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">getaddrinfo</span>(<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">string</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$domain</span>, <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">int</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$family</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">AF_INET</span>, <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">int</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$socktype</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">SOCK_STREAM</span>, <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">int</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$protocol</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">STREAM_IPPROTO_TCP</span>, <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">string</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$service</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">null</span>, <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">float</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$timeout</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>): <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">array</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">false</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 参数</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$domain</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:域名</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$family</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:域族【AF_INET</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">表示返回</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">IPv4</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">地址,使用</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">AF_INET6</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">时返回</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">IPv6</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">地址】;</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$socktype</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:协议类型;</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$protocol</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">协议;</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$service</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$timeout</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:超时时间</span></span>

案例:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\run</span>(<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span>() {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$ret</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">getaddrinfo</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'www.baidu.com'</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">var_dump</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$ret</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span>

输出结果:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$php</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">33</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">swoole</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">system</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">api</span>.<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">php</span> </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">array</span>(<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  [<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span>]<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">string</span>(<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">13</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"14.215.177.38"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  [<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>]<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">string</span>(<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">13</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"14.215.177.39"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">}</span>

wait

含义:对应原有的 Process:wait,不同的是此 API 是协程版本,会造成协程挂起,可替换 Swoole\Process::waitpcntl_wait 函数。

语法:Swoole\Coroutine\System::wait(float $timeout = -1): array|false

每个子进程启动后,父进程必须都要派遣一个协程调用 wait()(或 waitPid()) 进行回收,否则子进程会变成僵尸进程,会浪费操作系统的进程资源。 如果使用了协程,必须是先创建进程,进程里面再开协程。而不是反过来,否则就是带着协程 fork 情况会非常复杂,导致底层很难处理。

waitPid

含义:和上述 wait 方法基本一致,不同的是此 API 可以指定等待特定的进程。

语法:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">waitPid</span>(<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">int</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$pid</span>, <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">float</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$timeout</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>): <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">array</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">|</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">false</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 参数</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$pid</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">:进程</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">id</span></span>

案例:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$process</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">new</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Process</span>(<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> () {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">echo</span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'Hello Swoole'</span> . <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">PHP_EOL</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$process</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">start</span>();</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\run</span>(<span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span> () <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">use</span> (<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$process</span>) {</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$status</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole\Coroutine\System</span>::<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">waitPid</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$process</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-></span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">pid</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">print_r</span>(<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$status</span>);</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span>

输出结果:

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$php</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">33</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">swoole</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">system</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">api</span>.<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">php</span> </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Hello</span> <span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Swoole</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">Array</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    [<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">pid</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">34944</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    [<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">code</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    [<span style="box-sizing: border-box;color: rgb(18, 170, 228) !important">signal</span>] <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">)</span>

我是温新,本篇文章结束。

请登录后再评论