[视频教程] 最新版swoole安装和TASKS功能测试
2024-09-02 01:22:33
今天我们来安装和测试一下php的多并发高性能网络通信扩展,这个扩展是使用C语音开发的,加载到PHP以后,在PHP的层面上实现了多并发异步通信,模拟了go语音的很多特性,极大的拓宽了PHP的应用场景。
直接使用官网上的那句命令就可以,安装swoole时可能会出现错误和卡住不动,多试几次就能成功。
pecl install swoole
要配置php的cli环境和fpm环境的ini文件,把扩展的so加载进去。
视频地址:
https://www.bilibili.com/video/av70354024/
httpServer.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();
注意使用httpClient的时候会有一些错误,首先新版的swoole移除了Swoole\Http\Client,会报类找不到,其次要在协程中执行get方法
httpClient.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", 9502, 0.5);
taskServer.php
<?php
$serv = new Swoole\Server("127.0.0.1", 9502, SWOOLE_BASE); $serv->set(array(
'worker_num' => 2,
'task_worker_num' => 4,
)); $serv->on('Receive', function(Swoole\Server $serv, $fd, $from_id, $data) {
echo "接收数据" . $data . "\n";
$data = trim($data);
$task_id = $serv->task($data, 0);
$serv->send($fd, "分发任务,任务id为$task_id\n");
}); $serv->on('Task', function (Swoole\Server $serv, $task_id, $from_id, $data) {
echo "Tasker进程接收到数据";
echo "#{$serv->worker_id}\tonTask: [PID={$serv->worker_pid}]: task_id=$task_id, data_len=".strlen($data).".".PHP_EOL;
$serv->finish($data);
}); $serv->on('Finish', function (Swoole\Server $serv, $task_id, $data) {
echo "Task#$task_id finished, data_len=".strlen($data).PHP_EOL;
}); $serv->on('workerStart', function($serv, $worker_id) {
global $argv;
if($worker_id >= $serv->setting['worker_num']) {
swoole_set_process_name("php {$argv[0]}: task_worker");
} else {
swoole_set_process_name("php {$argv[0]}: worker");
}
}); $serv->start();
taskClient.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", 9502, 0.5);
最新文章
- Axure RP 7.0注册码
- 【MySQL】锁问题最佳实践
- iOS开发之AFN的基本使用
- 基于TcpListener的web服务器
- MySQL 5.6 Warning: Using a password on the command line interface can be insecure
- linux查询cpu核心数
- oralce表空间自增长占满磁盘
- (3)选择元素——(9)为交替的列加样式(Styling alternate rows)
- 使用MongoDB的开源项目(转)
- 【Linux】Linux 自己主动挂载NTFS格式移动硬盘
- 百度官方wormHole后门检测记录(转)
- javascript中的instanceof运算符
- 预攻击 局域网 Windows 查看其它在线设备
- webstorm2018版安装-破解
- 安全测试1_Web知识简介
- mysql 安装后出现 10061错误
- spring Mvc + Maven + 拷贝插件 (十一)
- [转]JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别
- JAXB:Java对象序和XML互相转化的利器
- [转]mysql日常工作手记
热门文章
- 使用VSCode创建一个Vue项目
- Android Studio如何配置CURL指令一键打包apk上传至蒲公英
- 【1期】mysql必知必会
- RabbitMQ学习笔记(三、生产者与消费者)
- Django celery 使用
- AcWing&#160;77.&#160;翻转单词顺序
- 解决问题:Red Hat Enterprise Linux 7 64 位 虚拟机安装后无法启动图形化
- 第05组 Beta冲刺(2/4)
- 【Linux命令】文件目录管理命令7个(touch、mkdir、cp、mv、rm、dd、file)
- 基于python的selenium常用操作方法(1)