今天我们来安装和测试一下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);

  

最新文章

  1. Axure RP 7.0注册码
  2. 【MySQL】锁问题最佳实践
  3. iOS开发之AFN的基本使用
  4. 基于TcpListener的web服务器
  5. MySQL 5.6 Warning: Using a password on the command line interface can be insecure
  6. linux查询cpu核心数
  7. oralce表空间自增长占满磁盘
  8. (3)选择元素——(9)为交替的列加样式(Styling alternate rows)
  9. 使用MongoDB的开源项目(转)
  10. 【Linux】Linux 自己主动挂载NTFS格式移动硬盘
  11. 百度官方wormHole后门检测记录(转)
  12. javascript中的instanceof运算符
  13. 预攻击 局域网 Windows 查看其它在线设备
  14. webstorm2018版安装-破解
  15. 安全测试1_Web知识简介
  16. mysql 安装后出现 10061错误
  17. spring Mvc + Maven + 拷贝插件 (十一)
  18. [转]JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别
  19. JAXB:Java对象序和XML互相转化的利器
  20. [转]mysql日常工作手记

热门文章

  1. 使用VSCode创建一个Vue项目
  2. Android Studio如何配置CURL指令一键打包apk上传至蒲公英
  3. 【1期】mysql必知必会
  4. RabbitMQ学习笔记(三、生产者与消费者)
  5. Django celery 使用
  6. AcWing&#160;77.&#160;翻转单词顺序
  7. 解决问题:Red Hat Enterprise Linux 7 64 位 虚拟机安装后无法启动图形化
  8. 第05组 Beta冲刺(2/4)
  9. 【Linux命令】文件目录管理命令7个(touch、mkdir、cp、mv、rm、dd、file)
  10. 基于python的selenium常用操作方法(1)