资讯专栏INFORMATION COLUMN

初识 swoole【下】

yeooo / 1970人阅读

摘要:前言接初识上,这篇主要是异步问题有收获的话请加颗小星星,没有收获的话可以反对没有帮助举报三连代码仓库初识下异步任务设置异步任务的工作进程数量连接连接欢迎大山驴回调投递异步任务触发异步任务服务端回复说处理异步任务新的异步任务

前言:接初识swoole【上】,这篇主要是异步问题

有收获的话请加颗小星星,没有收获的话可以 反对 没有帮助 举报三连

代码仓库

初识swoole【下】

6、异步任务
set(["task_worker_num" => 4]);
// connect 连接
$server->on("connect", function (swoole_server $server, $fd) {
    dump("{$fd}连接");
    $server->send($fd, "欢迎{$fd}大山驴
");
});
// receive 回调
$server->on("receive", function (swoole_server $server, $fd, $from_id, $data) {
    //投递异步任务
    $task_id = $server->task($data);
    dump("触发异步任务ID={$task_id}");
    $server->send($fd, "服务端回复:{$data}
");
    foreach ($server->connections as $connection) {
        if ($connection != $fd){
            $server->send($connection, "{$fd}说{$data}");
        }
    }
});
// task 处理异步任务
$server->on("task", function (swoole_server $server, $task_id, $from_id, $data){
    dump("新的异步任务[ID={$task_id}]");
    //返回任务执行的结果
    $server->finish("{$data}完成了");
});
// finish 处理异步任务的结果
$server->on("finish", function (swoole_server $server, $task_id, $data){
    dump("异步任务[{$task_id}]已经完成[{$data}]");
});
// close
$server->on("close", function (swoole_server $server, $fd) {
    dump("{$fd}关闭");
    foreach ($server->connections as $connection) {
        if ($connection != $fd){
            $server->send($connection, "{$fd}断开连接");
        }
    }
});
// start
$server->start();
php async.php

telnet 127.0.0.1 9505
7、同步TCP客户端
connect(HOST, 9501, 0.5)){
    dump("连接失败");
}
// send
if (! $client->send("你个山驴逼
")) {
    dump("发送失败");
}
// receive
if (! $data = $client->recv()) {
    dump("接收失败");
}
dump($data);
// close
$client->close();
php tcp_server.php

php tcp_sync_client.php
8、异步TCP客户端
on("connect", function (SwooleClient $cli){
    $cli->send("你个山驴逼
");
});
// receive
$client->on("receive", function (SwooleClient $cli, $data){
    dump("接收:{$data}");
});
// error
$client->on("error", function (SwooleClient $cli){
    dump("连接失败");
});
// close
$client->on("close", function (SwooleClient $cli){
    dump("连接关闭");
});
$client->connect(HOST, 9501, 0.5);
php tcp_server.php

php tcp_async_client.php
9、异步客户端

mysql

// 异步mysql客户端
$db = new SwooleMysql();
$config = [
    "host" => "127.0.0.1",
    "user" => "root",
    "password" => "root",
    "database" => "mac",
    "port" => "3307",
];

$db->connect($config, function (SwooleMysql $db, $rs) {
    $db->query("SELECT * FROM user", function (SwooleMysql $db, $rs) {
        dump($rs);
        $db->close();
    });
});

http

// 异步http客户端
$cli = new SwooleHttpClient("127.0.0.1", 80);
$cli->setHeaders(array("User-Agent" => "swoole-http-client"));
$cli->setCookies(array("test" => "value"));

$cli->get("/login", function (SwooleHttpClient $cli) {
    dump($cli->statusCode);
    dump($cli->cookies);
    dump($cli->headers);
});
10、协程客户端
// 协程mysql客户端
$http = new swoole_http_server(HOST, 9506);
$http->on("request", function ($request, $response) {
    $db = new SwooleCoroutineMysql();
    $db->connect([
        "host" => "127.0.0.1",
        "user" => "root",
        "password" => "root",
        "database" => "mac",
        "port" => "3307",
    ]);
    $data = $db->query("select * from user");
    dump($data);
    $response->end(json_encode($data));
});
$http->start();
php coroutine_client.php

curl -XGET "127.0.0.1:9506"

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29837.html

相关文章

  • Swoole学习手记(一)初识Swoole

    摘要:目录初识创建服务器上创建服务器下异步任务持续更新中。。。参加工作有一段时间了,偶尔会听到,对我这种小白粗略看下文档都会觉得很牛逼。个人理解就是解决这样应用场景的。 目录 初识Swoole 创建服务器(上) 创建服务器(下) 异步任务task 持续更新中。。。 参加工作有一段时间了,偶尔会听到swoole,对我这种PHP小白粗略看下文档都会觉得很牛逼。由于学习成本比较高,自身对网络异...

    yeyan1996 评论0 收藏0
  • 初识 swoole【上】

    摘要:前言都是为了生存有收获的话请加颗小星星,没有收获的话可以反对没有帮助举报三连代码仓库初始上一什么是面向生产环境的异步网络通信引擎使开发人员可以编写高性能的异步并发,服务。 前言:都是为了生存 有收获的话请加颗小星星,没有收获的话可以 反对 没有帮助 举报三连 代码仓库 初始swoole【上】 一、什么是swoole Swoole:面向生产环境的 PHP 异步网络通信引擎 使 PHP...

    scola666 评论0 收藏0
  • swoole入门4-初识swoole

    摘要:当某种网络事件发生时,会回调用户设置的指定回调函数。承担了底层网络事件的监听及各种底层事件处理,当收到请求时,会触发事件提醒,然后将控制权转交预先注册的事件回调函数,来进行后续的处理。请求到来时创建,请求结束后销毁。 运行流程图 showImg(https://segmentfault.com/img/remote/1460000017207791);showImg(https://s...

    forsigner 评论0 收藏0
  • 【宇润日常疯测-007】Swoole 协程与传统 fpm 同步模式比较

    摘要:初识协程执行结果协程与同步模式比较我们一直在说协程适合用于密集场景,在同样的硬件配置环境下,它会比传统的同步模式承载更多的访问量。假设一次查询为,在传统同步模式下,当前进程在这的时间里,是不能做其它操作的。同步模式,耗费左右的是。 如果说数组是 PHP 的精髓,数组玩得不6的,根本不能算是会用PHP。那协程对于 Swoole 也是同理,不理解协程去用 Swoole,那就是在瞎用。 首先...

    henry14 评论0 收藏0
  • swoole学习手记(三)创建服务器()

    摘要:目录初识创建服务器上创建服务器下异步任务持续更新中。。。而它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。 目录 初识Swoole 创建服务器(上) 创建服务器(下) 异步任务task 持续更新中。。。 1.创建HttpServer服务器 HttpServer是基于swoole_server,所以s...

    aikin 评论0 收藏0

发表评论

0条评论

yeooo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<