非常教程

Swoole教程

Swoole实例

Swoole Server实例

创建一个异步服务器程序,支持TCP、UDP、UnixSocket 3种协议,支持IPv4和IPv6,支持SSL/TLS单向双向证书的隧道加密。使用者无需关注底层实现细节,仅需要设置网络事件的回调函数即可。

swoole_server只能用于php-cli环境,否则会抛出致命错误

构建Server对象

$serv = new swoole_server("127.0.0.1", 9501, SWOOLE_BASE, SWOOLE_SOCK_TCP);

设置运行时参数

$serv->set(array(
    'worker_num' => 4,
    'daemonize' => true,
    'backlog' => 128,
));

注册事件回调函数

$serv->on('Connect', 'my_onConnect');
$serv->on('Receive', 'my_onReceive');
$serv->on('Close', 'my_onClose');

PHP中可以使用4种回调函数的风格

启动服务器

$serv->start();

属性列表

$serv->manager_pid;  //管理进程的PID,通过向管理进程发送SIGUSR1信号可实现柔性重启
$serv->master_pid;  //主进程的PID,通过向主进程发送SIGTERM信号可安全关闭服务器
$serv->connections; //当前服务器的客户端连接,可使用foreach遍历所有连接

运行流程图

Swoole Server实例

进程/线程结构图

Swoole Server实例

简单Swoole tcp server实例:

$serv = new Swoole\Server("127.0.0.1", 9501);

//设置服务器参数
$serv->set(array(
    'worker_num' => 8,   //工作进程数量
    'daemonize' => true, //是否作为守护进程
));

//设置事件回调函数
$serv->on('connect', function ($serv, $fd) {
    echo "Client:Connect.\n";
});

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

$serv->on('close', function ($serv, $fd) {
    echo "Client: Close.\n";
});

//启动服务器
$serv->start();
Swoole

Swoole是一个PHP的C扩展,可用来开发PHP的高性能高并发TCP/UDP Server。Swoole的网络IO部分基于epoll/kqueue事件循环,是全异步非阻塞的;业务逻辑部分使用多进程同步阻塞方式来运行,这样既保证了Server能够应对高并发和大量TCP连接,又保证业务代码仍然可以简单的编写。Swoole与Node.js相比更强大,支持同步/异步、多进程并行,Swoole提供了进程生命周期管理、内存保护机制,开发者无需考虑底层细节,专注于业务逻辑和功能的开发。

主页 https://www.swoole.com/
源码 https://github.com/swoole/swoole-src

Swoole目录

1. Swoole 教程
2.Swoole实例