本书未发布

关于 Swoole

为了更好的阅读体验,将文档从 Swoole 官方文档 搬运过来。内容比较多,我会慢慢搬运过来,也欢迎大家以提交改进的方式一起帮助我。

Swoole:面向生产环境的 PHP 异步网络通信引擎

使 PHP 开发人员可以编写高性能的异步并发 TCP UDP Unix Socket HTTP WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。

安装

#!/bin/bash
pecl install swoole

HTTP Server

    $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

    $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

    $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

    $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 = 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

 $server = new swoole_server("127.0.0.1", 9502);
 $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();

特性

Swoole 使用纯 C 语言编写,提供了 PHP 语言的异步多线程服务器,异步 TCP/UDP 网络客户端,异步 MySQL,异步 Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步 DNS 查询。 Swoole 内置了 Http/WebSocket 服务器端/客户端、Http2.0 服务器端。

除了异步 IO 的支持之外,SwoolePHP 多进程的模式设计了多个并发数据结构和 IPC 通信机制,可以大大简化多进程并发编程的工作。其中包括了并发原子计数器,并发 HashTableChannelLock,进程间通信IPC等丰富的功能特性。

Swoole2.0 以上版本(目前最新版本 4.4)支持了类似 Go 语言的协程,可以使用完全同步的代码实现异步程序。PHP 代码无需额外增加任何关键词,底层自动进行协程调度,实现异步。

关于文档

文档是从 Swoole 官方文档搬运过来的,可能会更新不及时,本身从开设这个社区角度来说,提供一个这样的文档是有必要的,而且其官方文档界面实在是简陋,看着很不舒心。所以才会想要搬运过来,因为文档的还是挺多的,个人也是有时间才开始搬运,所以还请见谅。

本文章首发在 LearnKu.com 网站上。
上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~