# 开发者工具 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是不是变得很轻松了呢。