# 框架入口
[TOC]
AppServer是SD框架的入口類,它管理著框架啟動的所有準備工作,這個類不會被Reload重載,也就是說如果修改了此類想讓其生效,那么必須重新啟動服務器通過Reload的方法是無法實現代碼熱更新的。
AppServer繼承SwooleDistributedServer類,SwooleDistributedServer絕大部分的函數作為使用者來說不是很常用,接下來我們介紹些常用的方法。
## __construct
可以在這定義自定義Loader
```php
/**
* 可以在這里自定義Loader,但必須是ILoader接口
* AppServer constructor.
*/
public function __construct()
{
$this->setLoader(new Loader());
parent::__construct();
}
```
## getEventControllerName
設置默認的事件控制器名稱,長連接(TCP,WS,WSS)需要配置
通過此函數可以將客戶端的connect和close的回調路由到控制器中。
```php
/**
* @return string
*/
public function getEventControllerName()
{
return 'AppController';
}
```
上面代碼將會將客戶端的連接和斷開事件路由到AppController控制器中。
>可通過Ports配置覆蓋此設置
## getConnectMethodName
設置默認的事件Connect方法名稱,長連接(TCP,WS,WSS)需要配置
```php
/**
* @return string
*/
public function getConnectMethodName()
{
return 'onConnect';
}
```
客戶端連接的信息會路由到AppController中onConnect方法。
如果在business.php配置中設置了前綴,控制器方法也需要包含前綴。
>可通過Ports配置覆蓋此設置
## getCloseMethodName
設置默認的事件Close方法名稱,長連接(TCP,WS,WSS)需要配置
```php
/**
* @return string
*/
public function getCloseMethodName()
{
return 'onClose';
}
```
客戶端關閉連接的信息會路由到AppController中onClose方法。
如果在business.php配置中設置了前綴,控制器方法也需要包含前綴。
>可通過Ports配置覆蓋此設置
## onOpenServiceInitialization
這個方法是服務器啟動時第一時間調用的方法,并且內部實現了鎖的操作,無論開多少個進程只會有一個進程會執行該方法,并且無論怎么reload也只會在啟動時執行僅僅一次。
我們可以在這個方法內實現開服初始化的工作。
## clearState
這個方法和onOpenServiceInitialization類似也是開服的初始化工作,但區別在于這是在服務器啟動前做的操作,所以并不支持任何異步屬性,如果你操作mysql只能使用pdo的方式,redis也只能使用同步擴展的方式。
## initAsynPools
這里主要是進行異步客戶端的初始化工作,onSwooleWorkerStart后會調用initAsynPools
進行客戶端的初始化。開發者可以在此函數中添加自定義的客戶端,比如額外的redis,額外的mysql,mqtt,httpclient等。
```php
$this->addAsynPool('GetIPAddress',new HttpClientPool($this->config,'http://int.dpool.sina.com.cn'));
```
用法很簡單通過addAsynPool添加一個署名的客戶端實例。
在Controller和Model中可以通過get_instance()->getAsynPool('GetIPAddress')獲取名為GetIPAddress的實例。
## beforeSwooleStart
這里是進階用法,熟悉swoole的開發者如果想創建自己的進程或者共享Table或者開放更多的端口,那么可以在這個函數中處理,名字表示的含義很清晰這是在swoole服務start方法之前調用的。
查看SwooleDistributedServer的beforeSwooleStart你會發現更多用法。
```php
$this->uid_fd_table = new \swoole_table(65536);
$this->uid_fd_table->column('fd', \swoole_table::TYPE_INT, 8);
$this->uid_fd_table->create();
```
## startProcess
啟動用戶進程,在這里可以自定義用戶進程
```php
/**
* 用戶進程
*/
public function startProcess()
{
parent::startProcess();
//ProcessManager::getInstance()->addProcess(MyProcess::class);
}
```
## onWebSocketHandCheck
```php
/**
* 可以在這驗證WebSocket連接,return true代表可以握手,false代表拒絕
* @param HttpInput $httpInput
* @return bool
*/
public function onWebSocketHandCheck(HttpInput $httpInput)
{
return true;
}
```
## get_instance()
get_instance()是個幫助函數,他始終返回的是SwooleDistributedServer實例,可以在代碼任何位置訪問到。
## 其他方法
* getMysql 獲取同步mysql
* getRedis 獲取同步redis
* sendToAllWorks 發送給所有的進程,$callStaticFuc為靜態方法,會在每個進程都執行
* sendToAllAsynWorks 發送給所有的異步進程,$callStaticFuc為靜態方法,會在每個進程都執行
* sendToRandomWorker 發送給隨機進程
* sendToOneWorker 發送給指定進程
* isReload 是否是重載
* sendToAll 廣播
* sendToUid 向uid發送消息
* pubToUid 向uid發布消息
* sendToUids 批量發送消息
* getSubMembersCountCoroutine 獲取Topic的數量
* getSubMembersCoroutine 獲取Topic的Member
* getUidTopicsCoroutine 獲取uid的所有訂閱
* addSub 添加訂閱
* removeSub 移除訂閱
* pub 發布訂閱
* addAsynPool 添加異步連接池
* getAsynPool 獲取連接池
* isCluster 是否開啟集群
* isConsul 是否開啟Consul
* kickUid 踢用戶下線
* bindUid 將fd綁定到uid,uid不能為0
* unBindUid 解綁uid,鏈接斷開自動解綁
* coroutineUidIsOnline uid是否在線
* coroutineCountOnline 獲取在線人數
* coroutineGetAllUids 獲取所有在線uid
* stopTask 向task發送強制停止命令
* getServerAllTaskMessage 獲取服務器上正在運行的Task
* getBindIp 獲取本機ip
* getUidInfo 獲取uid信息
- 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