PHP扩展之Swoole


php官方文档 //www.php.net/manual/zh/book.swoole.php
Swoole is a high-performance networking framework using an event-driven, asynchronous, non-blocking I/O model.
It can be used to develop high-performance, scalable, concurrent TCP, UDP, Unix socket, HTTP, Websocket services
Swoole 业务代码是写在 server.php 文件中,命令行下输入 php server.php 开启
PHP 高性能,异步,并发TCP、UDP、Unix Socket、HTTP,WebSocket 服务,
广泛用于互联网,移动通信,企业软件,云计算,网络游戏,物联网(IOT) 车联网 智能家居等领域,
用PHP+Swoole 作为网络通信框架,使企业 IT 研发团队,效率大大提升
Windows平台开发Swoole 三种环境中用linux
1.用 docker 虚拟机运行linux 推荐 alpine 体积小
2.CygWin
3.WSL(Windows Subsystem for Linux)
安装
#!/bin/bash
pecl install swoole


http_server.php
<?php
$http = new swoole_http_server("127.0.0.1", 9501);
$http->on("start", function ($server) {   echo "Swoole http server is started at http://127.0.0.1:9501\n";  });
$http->on("request", function ($request, $response) {
    $response->header("Content-Type", "text/plain");
    $response->end("Hello World\n");
});
$http->start();
?>
websocket_server.php
<?php
$server = new swoole_websocket_server("127.0.0.1", 9502);
$server->on('open', function($server, $req) {    echo "connection open: {$req->fd}\n"; });
$server->on('message', function($server, $frame) {
    echo "received message: {$frame->data}\n";
    $server->push($frame->fd, json_encode(["hello", "world"]));
});
$server->on('close', function($server, $fd) {
    echo "connection close: {$fd}\n";
});
$server->start();
?>
tcp_server.php
<?php
$server = new swoole_server("127.0.0.1", 9503);
$server->on('connect', function ($server, $fd){    echo "connection open: {$fd}\n"; });
$server->on('receive', function ($server, $fd, $reactor_id, $data) {
    $server->send($fd, "Swoole: {$data}");
    $server->close($fd);
});
$server->on('close', function ($server, $fd) {
    echo "connection close: {$fd}\n";
});
$server->start();
?>
tcp_client.php
<?php
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
$client->on("connect", function($cli) {    $cli->send("hello world\n"); });
$client->on("receive", function($cli, $data){    echo "received: {$data}\n"; });
$client->on("error", function($cli){    echo "connect failed\n"; });
$client->on("close", function($cli){    echo "connection close\n"; });
$client->connect("127.0.0.1", 9501, 0.5);
?>
Async Redis / HTTP / WebSocket Client
redis.php
<?php
$redis = new Swoole\Redis;
$redis->connect('127.0.0.1', 6379, function ($redis, $result) {
    $redis->set('test_key', 'value', function ($redis, $result) {
        $redis->get('test_key', function ($redis, $result) {
            var_dump($result);
        });
    });
});
$cli = new Swoole\Http\Client('127.0.0.1', 80);
$cli->setHeaders(array('User-Agent' => 'swoole-http-client'));
$cli->setCookies(array('test' => 'value'));
$cli->post('/dump.php', array("test" => 'abc'), function ($cli) {
    var_dump($cli->body);
    $cli->get('/index.php', function ($cli) {
        var_dump($cli->cookies);
        var_dump($cli->headers);
    });
});
?>
tasks.php
<?php
$server = new swoole_server("127.0.0.1", 9504);
$server->set(array('task_worker_num' => 4));
$server->on('receive', function($server, $fd, $reactor_id, $data) {
    $task_id = $server->task("Async");
    echo "Dispath AsyncTask: [id=$task_id]\n";
});
$server->on('task', function ($server, $task_id, $reactor_id, $data) {
    echo "New AsyncTask[id=$task_id]\n";
    $server->finish("$data -> OK");
});
$server->on('finish', function ($server, $task_id, $data) {
    echo "AsyncTask[$task_id] finished: {$data}\n";
});
$server->start();
?>
纯C语言编写,供PHP异步多线程服务器,异步 TCP/UDP 网络客户端,异步 MySQL,异步 Redis,数据库连接池,AsyncTask,
消息队列,毫秒定时器,异步文件读写,异步DNS查询,
Swoole 内置
Http/WebSocket服务器端/客户端,Http2.0服务器端,异步 IO 的支持,
Swoole 为 PHP 多进程的模式设计了多个并发数据结构和IPC通信机制
简化多进程并发编程的工作,包括 并发原子计数器,并发 HashTable,Channel Lock
进程间通信IPC等丰富的功能特性
Swoole 支持类Go 语言的协程,用完全同步的代码实现异步程序,
PHP 代码无需增加关键词,底层自动进行协程调度 实现异步,
事件驱动的异步编程模式
异步TCP/UDP/HTTP/WebSocket/HTTP2协议的服务器端/客户端
支持IPv4/IPv6/UnixSocket/TCP/UDP
支持SSL/TLS隧道加密
支持并发百万TCP长连接
支持毫秒定时器
支持异步/同步/协程
支持CPU亲和性设置/守护进程