summer项目开发一:框架搭建

开始构建summer。伟大征程第一步

1.设计包。

参考了下其他框架,现在都是基于composer进行管理,而且各个包分的比较细。第一个版本简单点,设计3个包,server、manage、core,其中core包含net等公共的,等第一个版本开发出来了再进行拆包
由于summer的namespace已经被人注册了,改为suframe,同样的霸气,管他3721,先去把包坑占起

创建git项目:
https://github.com/shulinqian/suframe-core
https://github.com/shulinqian/suframe-server
https://github.com/shulinqian/suframe-manage

然后到提交到packagist:
https://packagist.org/packages/suframe/server
https://packagist.org/packages/suframe/manage
https://packagist.org/packages/suframe/core

然后创建个测试项目进行开发
https://github.com/shulinqian/summer
切换开发分支https://github.com/shulinqian/summer/tree/dev

首先开发manage入手,根据前面的设计。
manage应该包含一个启动swoole http服务,websocket后面再说。考虑到可能和server公用,所以放到core/net,网络请求相关的全部丢进去
然后得有个命令行工具 console,然后一个命令行,一个net先跑起来,日志,实际等再慢慢添加
所以整个包的结构就成了

vendor/suframe
   core
      console
   manage
      Core.php
   server
      Core.php

2.设计目录

先开发manage,业务代码放在app目录。
要提供一些接口给server用,比如注册,同步服务,监听事件等,所以得有个action目录
配置目录必不可少
启动脚本
所以基础目录就如下

app
├── action
│   └── server
│       ├── Regist.php
│       ├── Search.php
│       └── Sync.php
├── config
└── manage.php

当然由于那些包还没有开发,先进行框架搭建,所以在根目录下新建了个目录suframe

suframe/
├── core
│   ├── console
│   │   └── Console.php
│   └── net
│       ├── http
│       │   └── Server.php
│       └── tcp
│           └── Server.php
├── manage
│   ├── Core.php
│   ├── README.md
│   └── traits
│       └── Singleton.php
└── server
    ├── Core.php
    └── README.md

来模拟包
然后在bin/bootstrap.php中添加下注册个命名空间

$loader->addPsr4("suframe\\", __DIR__ . '/../suframe/');

ok.到此一个最简单的目录架构已经出来了。 剩下的事情就是填充代码让这个manage首先把http服务跑起来,完成转发。 然后编写注册的代码。

3.选型

第一步要运行命令行,额,没有个console工具是不太方便的,看了下swoft的toolkit/cli-utils。然后easyswoole干脆自己写了个。 如果啥都要自己写,这个想不知道啥时候能完成。 搜了下,先用着 https://github.com/inhere/php-console/blob/master/README_cn.md 这个吧,也是用了toolkit

命令行总的个性化下吧,整个ascii字图
https://www.ascii-art-generator.org/,选big

4.开发

先开发manage
开发第一个文件肯定是入口文件,入口文件负责初始化自动加载和 初始化程序。 对比了下,个人还是喜欢easyswoole这种模式,简单明了. 所以新建bin/summer.php文件

#!/usr/bin/env php
<?php
require_once __DIR__ . '/bootstrap.php';

(new \suframe\manage\Core())->run();

入口就应该保持简单
然后编写core代码

现在需要一个config组件读取分散的config文件,额,本来想用symfony/config,结果给我下了一堆包。选了下 ,还是用https://github.com/hassankhan/config吧

标签: 无

发表评论: