共计 2899 个字符,预计需要花费 8 分钟才能阅读完成。
前言:接初识 swoole【上】,这篇主要是异步问题
有收获的话请加颗小星星,没有收获的话可以 反对 没有帮助 举报三连
代码仓库
初识 swoole【下】
6、异步任务
<?php
// new
$server = new swoole_server(HOST, “9505”,SWOOLE_PROCESS, SWOOLE_SOCK_TCP);
// 设置异步任务的工作进程数量
$server->set([‘task_worker_num’ => 4]);
// connect 连接
$server->on(“connect”, function (swoole_server $server, $fd) {
dump(“{$fd}连接 ”);
$server->send($fd, “ 欢迎 {$fd} 大山驴 \n”);
});
// 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}\n”);
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 客户端
<?php
// new 同步
$client = new \Swoole\Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
// connect
if (! $client->connect(HOST, 9501, 0.5)){
dump(“ 连接失败 ”);
}
// send
if (! $client->send(“ 你个山驴逼 \n”)) {
dump(“ 发送失败 ”);
}
// receive
if (! $data = $client->recv()) {
dump(“ 接收失败 ”);
}
dump($data);
// close
$client->close();
php tcp_server.php
php tcp_sync_client.php
8、异步 TCP 客户端
<?php
// new 异步
$client = new \Swoole\Client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
// connect
$client->on(“connect”, function (\Swoole\Client $cli){
$cli->send(“ 你个山驴逼 \n”);
});
// receive
$client->on(“receive”, function (\Swoole\Client $cli, $data){
dump(“ 接收:{$data}”);
});
// error
$client->on(“error”, function (\Swoole\Client $cli){
dump(“ 连接失败 ”);
});
// close
$client->on(“close”, function (\Swoole\Client $cli){
dump(“ 连接关闭 ”);
});
$client->connect(HOST, 9501, 0.5);
php tcp_server.php
php tcp_async_client.php
9、异步客户端
mysql
// 异步 mysql 客户端
$db = new \Swoole\Mysql();
$config = [
‘host’ => ‘127.0.0.1’,
‘user’ => ‘root’,
‘password’ => ‘root’,
‘database’ => ‘mac’,
‘port’ => ‘3307’,
];
$db->connect($config, function (\Swoole\Mysql $db, $rs) {
$db->query(‘SELECT * FROM user’, function (\Swoole\Mysql $db, $rs) {
dump($rs);
$db->close();
});
});
http
// 异步 http 客户端
$cli = new Swoole\Http\Client(‘127.0.0.1’, 80);
$cli->setHeaders(array(‘User-Agent’ => ‘swoole-http-client’));
$cli->setCookies(array(‘test’ => ‘value’));
$cli->get(‘/login’, function (\Swoole\Http\Client $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 \Swoole\Coroutine\Mysql();
$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”