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

起步

  • 1

    安装

    !/bin/bash

    pecl install swoole

  • 2

    HTTP Server

    <?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();

  • 3

    WebSocket Server

    <?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();

  • 4

    TCP Server

    <?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();

  • 5

    TCP Client

    <?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);

  • 6

    Async Redis / HTTP / WebSocket Client

    <?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);
    });

    });

  • 7

    Tasks

    <?php
    $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();


原网址: 访问
创建于: 2019-04-14 12:28:31
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论