子服务器(单项目多端口多协议)

优质
小牛编辑
136浏览
2023-12-01

imi 原生支持一个项目,单次启动,监听多个端口多个协议。

比如你要做一个聊天系统,http 用于注册、登录、上传文件等等,WebSocket 用于即时通讯。

http 和 WebSocket 同时做在一个项目中,代码之间没有隔阂,可以方便地互相调用和复用。

子服务器配置

项目配置文件:

[
    // 子服务器(端口监听)配置
    'subServers'    =>    [
        // 指定服务器命名空间
        'namespace'    =>    'ImiDemo\HttpDemo\MainServer',
        // 服务器类型(http/WebSocket/TcpServer/UdpServer)
        'type'        =>    \Imi\Server\Type::HTTP,
        // 监听的IP地址,可选
        'host'        =>    '0.0.0.0',
        // 监听的端口
        'port'        =>    8080,
        // 参考 swoole sockType,可选
        'sockType'    =>    SWOOLE_SOCK_TCP,
        // 服务器配置,参数用法同\Swoole\Server->set($configs)
        'configs'    =>    [
        ],
    ],
]

子服务器命名空间配置

在子服务器命名空间所在目录,需要创建一个 Main.php 入口文件。

<?php
namespace ImiApp\ApiServer;

use Imi\Main\BaseMain;

class Main extends BaseMain
{
    public function __init()
    {
        // 可以做一些初始化操作
    }

}

子服务器配置文件

文件:config/config.php

<?php
return [
    // 加载子配置文件,避免`config.php`过于臃肿不便维护
    // 要注意这里的别名不可与configs同级的名字重复,否则会被覆盖
    'configs'    =>    [
        "别名1"    =>    '配置文件路径1',
        "别名2"    =>    '配置文件路径2',
        ……
    ],
    // bean扫描目录,指定命名空间
    'beanScan'    =>    [
        'ImiDemo\HttpDemo\MainServer\Controller',
    ],
];

只有在 beanScan 中配置,才可以被扫描到,注解才可以生效