🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 框架入口 AppServer是SD框架的入口类,它管理着框架启动的所有准备工作,这个类不会被Reload重载,也就是说如果修改了此类想让其生效,那么必须重新启动服务器通过Reload的方法是无法实现代码热更新的。 AppServer继承SwooleDistributedServer类,SwooleDistributedServer绝大部分的函数作为使用者来说不是很常用,接下来我们介绍些常用的方法。 # __construct 可以在这定义自定义Loader ```php /** * 可以在这里自定义Loader,但必须是ILoader接口 * AppServer constructor. */ public function __construct() { $this->setLoader(new Loader()); parent::__construct(); } ``` # getEventControllerName 通过此函数可以将connect和close的回调路由到控制器中。 ```php /** * @return string */ public function getEventControllerName() { return 'AppController'; } ``` # getConnectMethodName 客户端连接的信息会路由到AppController中onConnect方法。 如果在business.php配置中设置了前缀,控制器方法也需要包含前缀。 ```php /** * @return string */ public function getConnectMethodName() { return 'onConnect'; } ``` # getCloseMethodName 客户端关闭连接的信息会路由到AppController中onClose方法。 如果在business.php配置中设置了前缀,控制器方法也需要包含前缀。 ```php /** * @return string */ public function getCloseMethodName() { return 'onClose'; } ``` # onOpenServiceInitialization 这个方法是服务器启动时第一时间调用的方法,并且内部实现了锁的操作,无论开多少个进程只会有一个进程会执行该方法,并且无论怎么reload也只会在启动时执行仅仅一次。 我们可以在这个方法内实现开服初始化的工作,这里支持协程,可以通过协程描绘异步调用。甚至你可以使用loader加载调用Model或者Task。 # 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(); ``` # get_instance() get_instance()是个帮助函数,他始终返回的是SwooleDistributedServer实例,可以在代码任何位置访问到。 # 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; } ``` # 更多 如果想知道SwooleDistributedServer更多的API请查看类介绍中SwooleDistributedServer章节。