swoft-cloud / swoft

🚀 PHP Microservice Full Coroutine Framework
https://swoft.org
Apache License 2.0
5.58k stars 786 forks source link

swoft 2.0 开发意见收集 #498

Closed inhere closed 5 years ago

inhere commented 5 years ago

swoft 2.0 开发意见收集

鉴于1.0的规划过于庞大,一些组件其实很少人使用,开发团队感觉维护困难。

决定开发2.0:

这里做一些意见收集

去除的功能:

需改进的功能:

新增的功能:

xxy123456 commented 5 years ago

swoole的timer中的一次和多次定时器需要支持下

995933447 commented 5 years ago

服务注册和发现那是必须得有啊 哈哈哈

inhere commented 5 years ago

服务注册和发现那是必须得有啊 哈哈哈

这个不再是必须的了 😄 现在 service mesh 这么火,他可以把这些都做了 后面可能会提供一些辅助类,帮助快速注册到 consul 之类的

yelstr commented 5 years ago

希望能增加依赖注入,配合注解使用还是很不错的。

lackoxygen commented 5 years ago

轻一点 然后需要即加载

sowork commented 5 years ago

有没有考虑过添加Requsts和Resources两层 Requests 专门做入参校验、比如类里面有属性,对应入参的值,在属性上可以添加注解进行校验,通过在controller具体的操作方法中用注解引入Requst 校验类 ,目前所有的字段添加到controller还是臃肿了

Resources 专门做出参格式化,从Logic获取数据后,通过Resource格式化为对应的格式输出

后期可以针对request和resource做一个api导出工具,既有入参又有出参

或者 两者变为一层 Structs层,反正Resources这一层就是和Request有重叠,我看laravel里面分成了Request和Resources

inhere commented 5 years ago

@sowork 是有想支持将验证的独立到一个类来做,这样对于一些字段较多的提交比较清晰

sowork commented 5 years ago

@inhere 是的,这是一个需求

如果能在其基础上扩充功能,比如根据入参属性生成文档,响应的时候,根据出参属性,自动返回给定的格式

tanpeng commented 5 years ago

希望swoft2.0连接池,配置中的多个负载地址,能够支持获取其中某个地址连接的功能。 需求其实主要是针对rpc这块,目前有些应用场景,对应多个rpc-server,希望能够定向分配一个server(比如用户登录成功后固定分配某一个server)。有些场景下的根据hash分库存储也可以用上。 目前1.0是按照连接池配置、服务写死的,有了这个功能,我想可以做到rpc-server动态上下线。

再确认下,这个2.0会支持么。

stelin commented 5 years ago

@tanpeng 你的原始需求是什么

tanpeng commented 5 years ago

@tanpeng 你的原始需求是什么 @stelin image

上图是1.0 连接池DB配置以及支持的形式(rpc也是一样的),支持配置多个地址进行负载。 主要需求是,希望能明确获取多个地址中指定的某一个;进一步的需求是,配置地址队列能动态增加或者摘除,这点不知道是否过份 (^.^)(^.^)。 因为现在多个地址,最大连接数等配置参数是共用的,某个地址最终建立多少连接是完全随机的,地址是否有效,也是不能动态去处理的。

stelin commented 5 years ago

@tanpeng 这个需求暂时不实现。

hihozhou commented 5 years ago

@stelin @inhere 大佬们,请问swoft2.0有预计发布日期吗?

to2false commented 5 years ago

新版是否有改进env里关于开发环境又不同的处理策略 比如异常处理,env是prod和dev应该有不同的错误输出(prod隐藏错误细节,dev输出详情),或者设置APP_DEBUG开控制

inhere commented 5 years ago

新版是否有改进env里关于开发环境又不同的处理策略 比如异常处理,env是prod和dev应该有不同的错误输出(prod隐藏错误细节,dev输出详情),或者设置APP_DEBUG开控制

异常处理都在 app/exception 里, 你可以自己根据 APP_DEUBG 之类的来调整输出

to2false commented 5 years ago

@inhere 我现在是这么处理的,感觉这些细节框架初始化直接附带上是不是更好点

inhere commented 5 years ago

也是可以的,不过现在这样自定义性更高

不想加,是因为不好加 各个人用的习惯不一样, prod 有些团队用的 pro production ... 等等,没法在框架内部定义出来

直接附带 - 就是在我们发的demo里加上这个判断就行了 😄

to2false commented 5 years ago

db这边的语法错误提示 比如

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'xxx' in 'where clause' file=/vendor/swoft/db/src/Driver/Mysql/SyncMysqlConnection.php line=85

这样的提示如果能补全到发生在哪个dao的具体位置会不会更好

scguang301 commented 5 years ago

希望orm部分考虑分库分表,可以有一些比较简单的使用

inhere commented 5 years ago

快速切换DB会提供。分表就不会实现了。。。

huxiaoguang commented 5 years ago

定时任务用的相当多,去掉是为什么呀

hihozhou commented 5 years ago

@scguang301 分表分库这种应该考虑使用一些中间件,如Mycat

inhere commented 5 years ago

是想后面重写定时任务这块,但是暂时没时间

scguang301 commented 5 years ago

快速切换DB会提供。分表就不会实现了。。。

快速切换表是否可以提供

phper666 commented 5 years ago

现在用1.0做开发框架了,1.0能完美升级到2.0吗?

inhere commented 5 years ago

快速切换DB会提供。分表就不会实现了。。。

快速切换表是否可以提供

哈哈 这样 DB::table('table name') 就可以了

inhere commented 5 years ago

现在用1.0做开发框架了,1.0能完美升级到2.0吗?

完美 应该是不行的。 不过表面上的使用大体都是没有变动的,变动最明显的是db吧。

phper666 commented 5 years ago

现在用1.0做开发框架了,1.0能完美升级到2.0吗?

完美 应该是不行的。 不过表面上的使用大体都是没有变动的,变动最明显的是db吧。

是打算用laravel的orm吗?个人觉得Yii2的AR 操作也很丰富,如果可以兼容yii2的AR就更好了

stelin commented 5 years ago

@phper666 现在2.0数据库已经高度兼容 laravel,至于 Yii 不会考虑兼容。

scguang301 commented 5 years ago

快速切换DB会提供。分表就不会实现了。。。

快速切换表是否可以提供

哈哈 这样 DB::table('table name') 就可以了

  1. 根据表生成的Model,可以快速表table吗,分表后表比较多,只想保留一个
  2. 预计什么时候出2.0版本
stelin commented 5 years ago

快速表table,什么意思?

scguang301 commented 5 years ago

快速表table,什么意思?

快速切换表

hihozhou commented 5 years ago

@inhere @stelin 昨天试了一下master的代码,发现会报错

Call to undefined method Swoole\Coroutine::getCid()

看了一下swoole源码发现4.3才提供getCid方法,所以这里要改一下 image

inhere commented 5 years ago

@hihozhou 好吧 改成 4.3+ 了

geXingW commented 5 years ago

亟需一款强力 Debugger

strivefatup commented 5 years ago

希望orm是组件化的,可以替换成其它orm,比如Doctrine

f39516046 commented 5 years ago

日志如果选用本地File的话,是否可以做 文件大小 的配置,日志写入的时候 如果当前文件达到size就进行切割, 同时日志这块是否可以本地以年月为目录,日志名以当天day,切割后的文件名以 day_时间戳 这样类似的格式进行保存。

本地存储日志文件这块是个问题,因为一旦单个文件size变大的时候很麻烦。 希望新版本可以进行变动一下

to2false commented 5 years ago

@f39516046 老的可以自定义log handler

f39516046 commented 5 years ago

这块如果内置的话,应该会更好吧, 一旦服务启动后,日志文件大小完全像滚雪球一样快速增大。 个人建议

akrick commented 5 years ago

希望加入一个企业级的RPC服务组件

stelin commented 5 years ago

@geXingW debugger 应该很后面才考虑,暂时应该是基础组件

stelin commented 5 years ago

@strivefatup 直接替换其它 ORM 有点难,2.0 ORM高度兼容laravel,熟悉laravel的用户,可以快速上手。

stelin commented 5 years ago

@f39516046 内置不太好,因为每个人拆分日志业务不一样,可以做好预留,根据用户需求自己按业务拆分。

strivefatup commented 5 years ago

@strivefatup直接替换其它ORM有点难,2.0 ORM高度兼容laravel,熟悉laravel的用户,可以快速上手。 在开发大型和复杂的应用时,Doctrine更具有优势,社区也比较完善

601157475 commented 5 years ago

2.0基础文档,能不能赶紧上一版

geXingW commented 5 years ago

@inhere

@geXingW debugger 应该很后面才考虑,暂时应该是基础组件

debugger 方便开发者追踪、调试、学习,直接降低门槛、提高了开发效率

scguang301 commented 5 years ago

orm, model层联合主键会支持吗

ywqyuan commented 5 years ago

自动扫描文件需要考虑 vim 生成的交换文件 *.php.swap 扫描问题,虽然可以通过设置不生成交换文件,但是不是最好的选择。

BardoQi commented 5 years ago

建议增加SOCKET通讯支持。最好集成编解码组件。参见: https://github.com/byteferry/sdds_php