# 开发者工具
SD在未来版本中将提供各种各样的实用的开发者工具。
开发者工具将以命令行的方式集成在SD发布包中使用。
![](https://box.kancloud.cn/762dea74dc92a7c4003d43d69e7e2c95_998x610.png)
接下来我将分别介绍这些工具包的使用
## Channel
channel命令需要指定一个uid作为源,命令启动后将会和服务器建立一个信息通道,该通道会自动复制uid客户端与服务器信息交互中产生的所有流量,并经过筛选显示到控制面板中。
```
php start_swoole_server.php channel -u 1
```
-u后面是绑定的uid,这是必不可缺的参数。
通道将会监听该uid与服务器交互的流量,并以PHP数组形式显示到控制面板中。
![](https://box.kancloud.cn/455e6e6e9aa8b353c03a4b747fc8a091_448x661.png)
> $SYS_CHANNEL/1/recv 代表是服务器接收到客户端的信息,相反的$SYS_CHANNEL/1/send 代表是服务器发送给客户端的信息
可以看到这是基于SD消息订阅实现的功能。SD的订阅发布系统功能强大性能卓越,该命令可以安全的调试线上服务器,而不用担心性能。
-u 1 后面可以继续接上多个参数,这些参数用于过滤,只有符合参数条件的消息才会被打印到控制台上。
```
php start_swoole_server.php channel -u 1 cmd:401
```
每个参数的格式都是$key:$value型,在消息数组结构中只要符合这种对应关系就会被选中,多个参数是或的关系。
有了这个工具开发者可以指定查看客户端数据流信息进行错误定位,无需再苦苦和客户端联调,特别是线上环境。
## Proto
Proto工具用于生成私有协议,如果你不满足protobuf或者其他协议类型,或者觉得直接使用json或者msgpack开发上不便捷,或者其他特殊原因。那么Proto工具是个最棒的选择。
目前Proto工具可以生成JS和PHP的协议,并且完美的与SD框架结合,让你无脑编写业务代码,爽到不要。
首先我们有个协议文档,这个文档是基于XML的。我们所有协议的定义都通过这个XML定义。
* Controller模块
![](https://box.kancloud.cn/8a1d96f5018fe3a68dfdfa70a30f0fd0_875x109.png)
和SD的Controller一摸一样,就是控制器,在这里定义控制器和方法,cmd是作为协议号。
* Struct结构体模块
![](https://box.kancloud.cn/c96d5619ae3f2988343bd7aeb68684ca_465x310.png)
定义所有的结构体。
结构体可以继续当type使用,甚至可以继承。
![](https://box.kancloud.cn/23ee343a8ba488c66c0cb09b7b9a4c9e_621x95.png)
* Marco模块
![](https://box.kancloud.cn/b98dcdfafcd64f2fcb43c23e62e07a55_785x43.png)
用于定义常量
整个协议都是基于上面3大模块构建的。
编写好XML后我们通过下面的命令就可以生成协议代码了,协议生成器拥有一个模板代码,开发者通过修改模板代码可以生成自己自定义的协议,生成器也是通过PHP写的,更高级的需求可以直接修改生成器。
我们来看看生成的代码吧。
![](https://box.kancloud.cn/cf2619dfaf37f007ba5aa38cbb8d4044_243x214.png)
PHP包含3个文件夹ic/rpc/struct,JS就简单了只有一个proto.js。
我们写SD控制器时直接implements对应的接口就能自动生成对应的控制器方法了,相当的简单。
![](https://box.kancloud.cn/8535015fa6e4606c5cd81fabcad1e383_209x170.png)
![](https://box.kancloud.cn/3936e408038e4ca191d5390fd53fec3b_525x590.png)
所有用到的结构体都会被生成在struct目录中
![](https://box.kancloud.cn/73f58c8f5b2f318cd82cb2c40b7e65b5_249x424.png)
rpc目录对应的是协议
![](https://box.kancloud.cn/d4c3d71dea293040c10c80fa5c0e220c_260x440.png)
## Model模块
Model模块是用于调试Model的,它可以直接访问Model对象通过控制台调试。
```
php start_swoole_server.php model
```
下面就是过程引导:
![](https://box.kancloud.cn/82dadfb78486e12eccde831b55d58bd8_341x306.png)
![](https://box.kancloud.cn/e528081f8c90d3f87553c1e944be707f_454x437.png)
首先会先让你输入model名称,然后会显示出所有的方法,选择方法后输入对应的变量。
> protected,private,public的方法都会被显示出来,都可以被调用,但是protected,private方法中如果存在协程切换会有bug出现。
如果遇到参数是个复杂对象无法通过控制台输入怎么办?
我们可以通过调用对应Model将结果保存成临时变量使用。
![](https://box.kancloud.cn/11415d3db29c542a4fdf8d15365ffec9_442x258.png)
![](https://box.kancloud.cn/a7c0a681e7192192b36527669b5c814a_637x382.png)
通过此工具开发过程中测试Model是不是变得很轻松了呢。
- SD3.X简介
- 捐赠SD项目
- VIP服务
- 基础篇
- 搭建环境
- 使用Composer安装/更新SD框架
- 启动命令
- 开发注意事项
- 框架配置
- 配置文件夹
- server.php
- ports.php
- business.php
- mysql.php
- redis.php
- timerTask.php
- log.php
- consul.php
- catCache.php
- client.php
- 自定义配置
- 框架入口
- MVC架构
- 加载器-Loader
- 控制器-Controller
- 模型-Model
- 视图-View
- 同步任务-Task
- 封装器
- Swoole编程指南-EOF协议
- Swoole编程指南-固定包头协议
- 封装器-Pack
- 路由器
- TCP相关
- 绑定UID
- Send系列
- Sub/Pub
- 获取服务器信息
- Http相关
- HttpInput
- HttpOutput
- 默认路由规则
- WebSocket相关
- 使用SSL
- 公共函数
- 进阶篇
- 内核优化
- 封装器路由器原理剖析
- 对象池
- 上下文-Context
- 中间件
- 进程管理
- 创建自定义进程
- 进程间RPC
- 自定义进程如何使用连接池
- 异步连接池
- Redis
- Mysql
- Mqtt
- HttpClient
- Client
- AMQP
- RPC
- 日志工具-GrayLog
- 微服务-Consul
- Consul基础
- 搭建Consul服务器
- SD中Consul配置
- 微服务
- 选举-Leader
- Consul动态配置定时任务
- 熔断与降级
- 集群-Cluster
- 高速缓存-CatCache
- 万物-Actor
- Actor原型
- Actor的创建
- Actor间的通讯
- 消息派发-EventDispatcher
- 延迟队列-TimerCallBack
- 协程
- 订阅与发布
- MQTT简易服务器
- AMQP异步任务调度
- 自定义命令-Console
- 调试工具Channel
- 特别注意事项
- 日常问题总结
- 实践案例
- 物联网自定义协议
- Actor在游戏的应用
- Mongodb以及一些同步扩展的使用
- 自定义进程使用MQTT客户端
- 开发者工具
- SDHelper