前文讲过可以通过配置开启一个tcp服务,叫做consoleTcpservice。EasySwoole\EasySwoole\Core::83行

(new TcpService(Config::getInstance()->getConf('CONSOLE')));  

这个就是一个console的Tcp子服务。然后可以自定义客户端去和主服务通信。

注意了源码注册了一个TcpParser,EasySwoole\EasySwoole\Console\TcpParser 这个解析器要求了数据的分包规则。

在 EasySwoole\EasySwoole\Console\TcpController 下实现一个help方法,这个是当数据错误非json请求的时候返回的。 TcpParser::decode方法会对解析到的数据进行jsondecode,如果不是array就会默认匹配help的Action。

public function decode($raw, $client): ?Caller
{
// TODO: Implement decode() method.
Logger::getInstance()->console($raw);
$caller = new Caller();
$data = self::unpack($raw);
$arr = json_decode($data,true);
if(!is_array($arr)){
$arr = [
'action'=>'help',
'controller'=>TcpController::class,
'args'=>[
]
];
}else{
$arr['controller'] = TcpController::class;
}
$caller->setAction($arr['action']);
$caller->setControllerClass($arr['controller']);
$caller->setArgs($arr['args']);
return $caller;
}

付上一个客户端脚本,仅仅是测试所用

<?php
function mpack(string $data):string
{
return pack('N', strlen($data)).$data;
} function munpack(string $data):string
{
return substr($data,'4');
}
$client = new swoole_client(SWOOLE_SOCK_TCP); //连接到服务器
if (!$client->connect('127.0.0.1', 9502, 0.5))
{
die("connect failed.");
}
$data = ['action'=>'hostIp', 'args'=>[
]];
$poststr = mpack(var_export($data,true));
//$poststr = mpack(json_encode($data));
//向服务器发送数据
if (!$client->send($poststr))
{
die("send failed.");
}
//从服务器接收数据
$data = $client->recv();
if (!$data)
{
die("recv failed.");
}
print_r(munpack($data));
//关闭连接
$client->close();

当错误解析的时候会被解析到help方法。如果正确的话,那就按照上面的脚本去掉

//$poststr = mpack(json_encode($data));

再次运行,就会获取到ip地址了EasySwoole\EasySwoole\Console\TcpController::hostIp

其实最主要的命令还是那么几个控制开关和reload的命令

分析easyswoole3.0源码,consoleTcpService(六)的更多相关文章

  1. 分析easyswoole3.0源码,服务启动为例(二)

    以下内容需要结合es的源码,不然可能会觉得跳跃.先描述下es启动的大致流程.es启动的时候注册异常处理函数以及加载配置文件.根据位置文件的设置选择启动哪种swoole服务.然后用一个事件注册类,注册s ...

  2. 分析easyswoole3.0源码,协程连接池(五)

    连接池的含义,很多都知道,比如mysql的数据库连接是有限的,一开始连接mysql创建N个连接,放到一个容器里,每次有请求去容器中取出,取出用完再放回去. es3demo里,有mysql的连接池. E ...

  3. 分析easyswoole3.0源码,体验es3(三)

    demo在手,总得去试试看效果吧.我们先把默认的服务改成webserver,并且添加数据库的配置. 建立数据库,github里面有相关内容 CREATE TABLE `user_list` ( `us ...

  4. 分析easyswoole3.0源码,服务启动为例(一)

    swoole已经升级到4了,主要的特性是更好的支持协程,easyswoole也为了更好支持协程推出了es3.我本地环境是php7.2.9 centos7 在github下载最新的3.0的demo.地址 ...

  5. 分析easyswoole3.0源码,Trace组件(四)

    前文,我们访问地址的时候服务端会输出类似trace信息.那么原理是什么呢?其实es3已经把这个独立出来作为单独组件了,名字叫做Trace组件 在demo里的调用原理是 EasySwooleEvent: ...

  6. AFNetworking (3.1.0) 源码解析 <六>

    这次继续介绍文件夹Serialization下的类AFURLResponseSerialization.这次介绍就不拆分了,整体来看一下.h和.m文件. 协议AFURLResponseSerializ ...

  7. Solr4.8.0源码分析(10)之Lucene的索引文件(3)

    Solr4.8.0源码分析(10)之Lucene的索引文件(3) 1. .si文件 .si文件存储了段的元数据,主要涉及SegmentInfoFormat.java和Segmentinfo.java这 ...

  8. AFNetWorking3.0源码分析

    分析: AFNetWorking(3.0)源码分析(一)——基本框架 AFNetworking源码解析 AFNetworking2.0源码解析<一> end

  9. Solr5.0源码分析-SolrDispatchFilter

    年初,公司开发法律行业的搜索引擎.当时,我作为整个系统的核心成员,选择solr,并在solr根据我们的要求做了相应的二次开发.但是,对solr的还没有进行认真仔细的研究.最近,事情比较清闲,翻翻sol ...

随机推荐

  1. Java、中Date的格式初始化以及Calendar的使用

    使用字符串初始化Date String dateString = “2018-02-23”; Date date= new SimpleDateFormat(“yyyy-MM-dd”).parse(d ...

  2. php+ajax 文件上传

    html 代码 <form action="{pboot:form fcode=8}" method="post" id="t" en ...

  3. Linux下Docker快速部署LAMP

    文章目录 拿来即用 获取LAMP LAMP版本 icoty1/lamp:v1.1.0制作过程 获取ubuntu基础镜像 安装依赖 mysql apache/php phpmyadmin 使apache ...

  4. 【机器学习_9】sklearn

    背景 机器学习的重头戏就在sklearn,里面包含各种机器学习算法.希望尽量通过便易上手的方式掌握这个库. 资料 官网--随时查 https://scikit-learn.org/stable/ sk ...

  5. [SQL][MS SQL]ID自增列从1开始重新排序

    数据库中把ID自增长重置成1: 一般做法:(太麻烦) 复制表数据->删除原表.新建一张表->粘贴: 新方法: 数据库中:新建查询->复制.粘贴一下代码->修改表名,执行即可(先 ...

  6. 性能测试进阶指南——基础篇之磁盘IO

    本文旨在帮助测试人员对性能测试常用指标做一个简单的讲解,主要包括CPU.内存.磁盘和网络带宽等系统资源,本文仅仅局限于Linux系统,Windows Server系统暂不做考虑. 使用iostat分析 ...

  7. app常见专项测试点

    转载自 https://blog.csdn.net/xiaomaoxiao336368/article/details/84887948

  8. JAVA_maven 配置

    前人种树: https://www.cnblogs.com/supiaopiao/p/7276805.html?utm_source=itdadao&utm_medium=referral

  9. JavaFX(Maven 方式)

    运行界面第一种方式 运行界面第二种方式 参考文献 https://github.com/AlmasB/JavaFX11-example

  10. 排序大集合java

    今日面试被问到排序问题,发现自己的不足,特来查漏补缺: 首先是各大排序算法的总结表 排序算法大合集  排序算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 稳定性 冒泡排序 Ο(n2) Ο(n) ...