• ServerManager
    • 创建主服务
    • 创建子服务
    • 获取服务
    • 获取注册事件类 getMainEventRegister
    • start和isStart
    • getSubServerRegister

    ServerManager

    服务管理类: EasySwoole\EasySwoole\ServerManager

    ServerManager 它是一个单例类(use EasySwoole\Component\Singleton)

    创建主服务

    EasySwooleEventmainServerCreate事件中可通过createSwooleServer监听子服务.
    该方法在框架底层自动调用,将创建一个swoole主服务(未开启服务),可通过getSwooleServer方法获取,并设置事件回调,调用原生swoole服务方法创建子服务,等

    创建子服务

    EasySwooleEventmainServerCreate事件中可通过addServer监听子服务.

    1. <?php
    2. public static function mainServerCreate(EventRegister $register)
    3. {
    4. ################# tcp 服务器1 没有处理粘包 #####################
    5. $tcp1ventRegister = $subPort1 = ServerManager::getInstance()->addServer('tcp1', 9502, SWOOLE_TCP, '0.0.0.0', [
    6. 'open_length_check' => false,//不验证数据包
    7. ]);
    8. $tcp1ventRegister->set(EventRegister::onConnect,function (\swoole_server $server, int $fd, int $reactor_id) {
    9. echo "tcp服务1 fd:{$fd} 已连接\n";
    10. $str = '恭喜你连接成功服务器1';
    11. $server->send($fd, $str);
    12. });
    13. $tcp1ventRegister->set(EventRegister::onClose,function (\swoole_server $server, int $fd, int $reactor_id) {
    14. echo "tcp服务1 fd:{$fd} 已关闭\n";
    15. });
    16. $tcp1ventRegister->set(EventRegister::onReceive,function (\swoole_server $server, int $fd, int $reactor_id, string $data) {
    17. echo "tcp服务1 fd:{$fd} 发送消息:{$data}\n";
    18. });
    19. }

    addServer方法返回的是EventRegister方法注册类,可通过该类去注册/设置服务的事件回调

    获取服务

    通过getSwooleServer可获取当前创建的swoole服务以及监听的子服务

    1. <?php
    2. /**
    3. * Created by PhpStorm.
    4. * User: Apple
    5. * Date: 2018/11/1 0001
    6. * Time: 11:10
    7. */
    8. namespace App\HttpController;
    9. use EasySwoole\EasySwoole\ServerManager;
    10. use EasySwoole\Http\AbstractInterface\Controller;
    11. class Index extends Controller
    12. {
    13. function index()
    14. {
    15. // TODO: Implement index() method.
    16. }
    17. function push(){
    18. $fd = intval($this->request()->getRequestParam('fd'));
    19. $info = ServerManager::getInstance()->getSwooleServer()->connection_info($fd);
    20. if(is_array($info)){
    21. ServerManager::getInstance()->getSwooleServer()->send($fd,'push in http at '.time());
    22. }else{
    23. $this->response()->write("fd {$fd} not exist");
    24. }
    25. }
    26. }

    同样,也可以在EasySwooleEventmainServerCreate事件 通过这个获取到主服务之后,添加一个自定义进程

    1. ServerManager::getInstance()->getSwooleServer()->addProcess((new Test('test_process'))->getProcess());

    获取到的是swoole的服务,可使用swoole服务所有的方法.

    获取注册事件类 getMainEventRegister

    getMainEventRegister方法可获取主服务的事件注册类,该类可注册主服务的事件回调
    该方法框架底层自动调用,在mainServerCreate事件中,传入到EasySwooleEventmainServerCreate方法作为参数使用,例如为主服务注册onWorkerStart事件

    1. <?php
    2. public static function mainServerCreate(EventRegister $register)
    3. {
    4. $register->add($register::onWorkerStart,function (\swoole_server $server,int $workerId){
    5. var_dump($workerId.'start');
    6. });
    7. }

    start和isStart

    start方法将处理配置的swoole主服务,子服务,以及回调事件,并开启服务,该方法由框架内部调用,调用成功代表着服务已经启动成功.
    isStart 方法将返回服务是否启动成功的bool变量

    getSubServerRegister

    getSubServerRegister将获取到所有子服务创建的事件回调.