× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

Process::signal

注意事项

不同的硬件平台和软件环境,测试出的实际数据并不相同,因此仅建议进行基准测试,在相同的环境下测试不同软件系统之间的性能差距

  • 编译Swoole必须关闭debug,使用gcc -O2或更高优化级别
  • 关闭屏幕输出,否则打印屏幕的echo操作会使服务器阻塞
  • 在多核的机器上开启合适的进程数量,进程数量不足将无法发挥全部硬件计算能力
  • 检查程序中是否存在PHP错误,PHP错误处理会使服务器的处理能力大幅下降

优化选项

  • 使用SWOOLE_BASE模式,可以减少2IPC开销,提升性能
  • 启用端口复用,可大幅提高短连接服务的性能,需要Linux-3.10或更高版本内核
  • 关闭gzip压缩,可节省服务器CPU的开销
  • 移除没有实际逻辑的回调设置,如程序中并未使用onConnectonClose回调,在代码中不要设置这2项回调
Swoole\Async::set(array('enable_reuse_port' => true));
$serv = new swoole_server("0.0.0.0", 9502, SWOOLE_BASE);

$serv->set(array(
    'worker_num' => 8,
));

$serv->on('receive', function (swoole_server $serv, $fd, $from_id, $data)
{
    $serv->send($fd, "Swoole: " . $data);
    //$serv->close($fd);
});

$serv->start();

  • youke

    这个方法只能在异步的tcp client上用吗?我在同步的client上使用这个方法,可是不管用,kill时没有监听到SIGTERM信号。

    $cli = new swoole_client(SWOOLE_TCP | SWOOLE_KEEP, SWOOLE_SOCK_SYNC);

    swoole_process::signal(SIGTERM, function($signo) { echo "shutdown."; });

    if ($cli->connect('127.0.0.1', 9501)) { while (true) { // do something } } else { echo "connect failed."; }

  • Rango-韩天峰

    异步和同步的代码不能混用。

  • 中华8字节

    那个server中addProcess怎么关掉?

  • 晨东

    问下,process中,如果父进程意外退出,子进程,怎么监控到?并退出呢。

  • play_soso

    https://wiki.swoole.com/wiki/page/p-process.html

  • 李尔摩斯

    感觉比PHP的Pcntl写起来好用

  • 我们都是坏银

    PHP7 Pcntl 在TCP Client上表现不好, 同是信号监听的signal 方法 swoole_process::signal 表现更好

  • byte

    同步阻塞的程序可以使用pcntl扩展提供的pcntl_signal

    可以提供具体例子不,我使用了,但无效

  • fa-king

    同求一个同步信号监听的例子