Swoole addProcess的使用
addProcess函数 是添加一个用户自定义的工作进程。这个有什么用呢?服务在启动后,可以用于监控、上报或者其他特殊的任务。
注意这个添加的进程是被manager进程管理的。如果这个添加的用户进程经常exit的话,会不断的被manager拉起。所以这个用户进程需要守护,最简单就是让它是一个死循环,不让它频繁退出。
现在写一个测试脚本。作用是创建一个用户进程,可以获取当前服务的一些状态,比如得到当前Server的活动TCP连接数,启动时间,accpet/close的总次数等信息。
<?php
//演示添加一个进程,然后接受信息,获取当前服务端有多少连接数
//创建Server对象,监听 127.0.0.1:9501端口
$serv = new swoole_server("127.0.0.1", 9501); //监听连接进入事件
$serv->on('connect', function ($serv, $fd) {
echo "Client: Connect.\n";
}); $globServiceProcess = new swoole_process(function($process) use ($serv) {
while (true) {
$msg = $process->read();
$msg = json_decode($msg,true);
$statsArr = $serv->stats();
//发回给当前请求的用户
if(isset($msg['command'])){
$sendMsg = $statsArr[$msg['command']]??"无效指令";
$serv->send($msg['fd'],sprintf("连接fd=%d:结果=%s".PHP_EOL,$msg['fd'],$sendMsg));
}
}
}); $serv->addProcess($globServiceProcess); //监听数据接收事件
$serv->on('receive', function ($serv, $fd, $from_id, $data) use($globServiceProcess) {
if($data){
$data = trim($data);
echo '通过管道发送给globServiceProcess指令,获取内容'.PHP_EOL;
//发送的内容长度在Linux系统下最大不超过8K
$globServiceProcess->write(json_encode(['command'=>$data,'fd'=>$fd]));
echo json_encode(['command'=>$data,'fd'=>$fd]);
}
$serv->send($fd, "Server: ".$data.PHP_EOL);
}); //监听连接关闭事件
$serv->on('close', function ($serv, $fd) {
echo "Client: Close.\n";
}); //启动服务器
$serv->start();
在cli端启动服务。
然后telnet访问,先多开几个telnet,加大连接数
Swoole addProcess的使用的更多相关文章
- LaravelS - 基于Swoole加速Laravel/Lumen
LaravelS LaravelS是一个胶水项目,用于快速集成Swoole到Laravel或Lumen,然后赋予它们更好的性能.更多可能性.Github 特性 内置Http/WebSocket服务器 ...
- 编译安装PHP7并安装Redis扩展Swoole扩展
编译安装PHP7并安装Redis扩展Swoole扩展 在编译php7的机器上已经有编译安装过php5.3以上的版本,从而依赖库都有了 本php7是编译成fpm-php 使用的, 如果是apache那么 ...
- 使用php+swoole对client数据实时更新(下)
上一篇提到了swoole的基本使用,现在通过几行基本的语句来实现比较复杂的逻辑操作: 先说一下业务场景.我们目前的大多数应用都是以服务端+接口+客户端的方式去协调工作的,这样的好处在于不论是处在何种终 ...
- 使用php+swoole对client数据实时更新(上)
如果想对一个列表做实时的更新,传统的做法是采用轮询的方式.以web为例,通过Ajax定时请求服务端然后获取数据显示在页面.这种方式实现简单,缺点就是浪费资源. HTTP1.1新增加了对websocke ...
- [Linux][PHP]安装swoole扩展
1.下载swoole 2.解压并配置 /usr/local/php/bin/phpize ./configure --enable-swoole-debug --enable-sockets --en ...
- 被swoole坑哭的PHP程序员
被swoole坑哭的PHP程序员 2015-09-16 09:57 文帅营 博客园 字号:T | T 首先说一下对swoole的理解:披着PHP外衣的C程序.很多PHPer朋友看到swoole提供的强 ...
- centos下php安装swoole扩展
官网:http://wiki.swoole.com/wiki/index/prid-1 国内Git镜像:http://git.oschina.net/matyhtf/swoole.git 下载源码后, ...
- windows php swoole 安装
Cygwin 官方地址:http://www.cygwin.com/ swoole 官方下载地址:https://github.com/swoole/swoole-src/releases 1.下载 ...
- Linux下swoole的安装配置
前几天搭建swoole环境,在安装php的swoole扩展时不知道什么原因,提示成功,但是使用的时候不能加载,最后决定重新安装php试试,顺便记录了php的安装过程 wget http://cn2.p ...
随机推荐
- java+Selenium+TestNg搭建自动化测试架构(1)实现代码和数据的分离
1.主要介绍介绍Java+Selenium+POM的自动化测试框架的搭建,第一个首先实现代码和账号URL等信息的分离.第二点支持跨浏览器,通过读取配置文件的方式实现. 1)将账号URL等信息添加在pr ...
- 佳鑫:信息流广告CTR一样高,哪条文案转化率更好?
在优化信息流广告的过程中,你有没有遇到这样的帐户? 投了几个AB方案,点击率好不容易上去了,但转化率还是有的高.有的低! 这儿就有这么一个为难的案例: 一个广告主计划向有意愿在北京预订酒店的用户投放信 ...
- MySQL(进阶部分)
视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( SEL ...
- kettle删除移动文件
- C 语言能不能在头文件定义全局变量?
可以,但一般不会将全局变量的定义写在头文件中. 因为如果多个 C 源文件都添加了头文件,很容易引起重定义的问题.这时候一般编译器都会提示:“multiple definition of... firs ...
- JEECG3.8 全套实战视频全部开放,免费下载!
JEECG快速开发平台V3.8版本自去年10月份发布以来,下载使用数屡创新高,并受到众多开发者积极反馈.为帮助更多初学者能够快速上手,JEECG V3.8版本实战教程现已全面开放,免费下载!本教程深入 ...
- Java解法-两数相加(Add Two Numbers)
问题 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. ...
- UE4 Virtual Reality Input输入配置表导入
[/Script/Engine.InputSettings] AxisConfig=(AxisKeyName="OculusTouch_Right_FaceButton2",Axi ...
- DOM访问和处理HTML文档的标准方法
innerHTML获取或替换HTML元素的内容 <p id="d">对于错我无法来判断 </p><script type="text/jav ...
- Dev破解组件。
将UI项目中的properties的license.lcx内容清空