# 開發者工具
SD在未來版本中將提供各種各樣的實用的開發者工具。
開發者工具將以命令行的方式集成在SD發布包中使用。

接下來我將分別介紹這些工具包的使用
## Channel
channel命令需要指定一個uid作為源,命令啟動后將會和服務器建立一個信息通道,該通道會自動復制uid客戶端與服務器信息交互中產生的所有流量,并經過篩選顯示到控制面板中。
```
php start_swoole_server.php channel -u 1
```
-u后面是綁定的uid,這是必不可缺的參數。
通道將會監聽該uid與服務器交互的流量,并以PHP數組形式顯示到控制面板中。

> $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模塊

和SD的Controller一摸一樣,就是控制器,在這里定義控制器和方法,cmd是作為協議號。
* Struct結構體模塊

定義所有的結構體。
結構體可以繼續當type使用,甚至可以繼承。

* Marco模塊

用于定義常量
整個協議都是基于上面3大模塊構建的。
編寫好XML后我們通過下面的命令就可以生成協議代碼了,協議生成器擁有一個模板代碼,開發者通過修改模板代碼可以生成自己自定義的協議,生成器也是通過PHP寫的,更高級的需求可以直接修改生成器。
我們來看看生成的代碼吧。

PHP包含3個文件夾ic/rpc/struct,JS就簡單了只有一個proto.js。
我們寫SD控制器時直接implements對應的接口就能自動生成對應的控制器方法了,相當的簡單。


所有用到的結構體都會被生成在struct目錄中

rpc目錄對應的是協議

## Model模塊
Model模塊是用于調試Model的,它可以直接訪問Model對象通過控制臺調試。
```
php start_swoole_server.php model
```
下面就是過程引導:


首先會先讓你輸入model名稱,然后會顯示出所有的方法,選擇方法后輸入對應的變量。
> protected,private,public的方法都會被顯示出來,都可以被調用,但是protected,private方法中如果存在協程切換會有bug出現。
如果遇到參數是個復雜對象無法通過控制臺輸入怎么辦?
我們可以通過調用對應Model將結果保存成臨時變量使用。


通過此工具開發過程中測試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