Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
one
提交
e8451b93
O
one
项目概览
OpenDocCN
/
one
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
one
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
e8451b93
编写于
12月 15, 2018
作者:
lzc828
提交者:
GitHub
12月 15, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update README.md
上级
282b91cd
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
51 addition
and
11 deletion
+51
-11
README.md
README.md
+51
-11
未找到文件。
README.md
浏览文件 @
e8451b93
# One - 一个极简的基于swoole常驻内存框架
## 背景
在用过
`laravel`
框架,发现它的
`路由`
和
`数据库ORM`
确实非常好用,但是整体确实还有点慢,执行到控制器大于需要耗时60ms左右。于是打算做一个拥有非常好用的路由和orm又非常简单的框架。所以你会发现one框的
`路由`
和
`ORM`
有laravel的影子。但也有一些自己的特色,例如
`ORM`
支持自动化缓存(自动化读、写、刷新)保持与数据库同步,对外使用无感知。更多功能请看文档。one框架也支持在fpm下运行,框架自身整体耗时在
`1ms`
左右。
在用过
`laravel`
框架,发现它的
`路由`
和
`数据库ORM`
确实非常好用,但是整体确实还有点慢,执行到控制器大于需要耗时60ms左右。于是打算做一个拥有非常好用的路由和orm又非常简单的框架。所以你会发现one框的
`路由`
和
`ORM`
有laravel的影子。但也有一些自己的特色,例如
`ORM`
支持自动化缓存(自动化读、写、刷新)保持与数据库同步,对外使用无感知。更多功能请看文档。one框架也支持在fpm下运行,框架自身整体耗时在
1ms
左右。
## hello world
...
...
@@ -38,12 +38,6 @@ curl http://127.0.0.1:8081/
-
RequestId跟踪
[
详细文档地址
](
https://www.kancloud.cn/vic-one/php-one/826876
)
[
使用列子-DEMO
](
https://github.com/lizhichao/one-demo
)
QQ交流群: 731475644
## 路由
```
php
...
...
@@ -111,7 +105,7 @@ class User extends Model
$user
=
User
::
find
(
1
);
// 关联查询
$user_list
=
User
::
whereIn
(
'id'
,[
1
,
2
,
3
])
->
with
(
'articles'
)
->
findAll
();
$user_list
=
User
::
whereIn
(
'id'
,[
1
,
2
,
3
])
->
with
(
'articles'
)
->
findAll
()
->
toArray
()
;
// 更新
$r
=
$user
->
update
([
'name'
=>
'aaa'
]);
...
...
@@ -199,6 +193,37 @@ Cache::flush('tag1');
## RPC
### 服务端
启动rpc服务器,框架已经内置了各个协议的rpc服务,添加到到上面配置文件的
`action`
即可。列如: 支持
`http`
调用,又支持
`tpc`
调用。
```
php
// http 协议 rpc服务
[
'port'
=>
8082
,
'action'
=>
\
App\Server\RpcHttpPort
::
class
,
'type'
=>
SWOOLE_SOCK_TCP
,
'ip'
=>
'0.0.0.0'
,
'set'
=>
[
'open_http_protocol'
=>
true
,
'open_websocket_protocol'
=>
false
]
],
// tpc 协议 rpc服务
[
'port'
=>
8083
,
'action'
=>
\
App\Server\RpcTcpPort
::
class
,
'type'
=>
SWOOLE_SOCK_TCP
,
'pack_protocol'
=>
\
One\Protocol\Frame
::
class
,
// tcp 打包 解包协议
'ip'
=>
'0.0.0.0'
,
'set'
=>
[
'open_http_protocol'
=>
false
,
'open_websocket_protocol'
=>
false
,
'open_length_check'
=>
1
,
'package_length_func'
=>
'\One\Protocol\Frame::length'
,
'package_body_offset'
=>
\
One\Protocol\Frame
::
HEAD_LEN
,
]
]
```
添加具体服务到rpc,
例如有个类
`Abc`
```
php
...
...
@@ -240,7 +265,8 @@ class Abc
// 添加Abc到rpc服务
RpcServer
::
add
(
Abc
::
class
);
// 如果你不希望把Abc下的所有方法都添加到rpc服务,也可以指定添加。未指定的方法客户端无法调用.
// 如果你不希望把Abc下的所有方法都添加到rpc服务,也可以指定添加。
// 未指定的方法客户端无法调用.
//RpcServer::add(Abc::class,'add');
// 分组添加
...
...
@@ -279,8 +305,14 @@ $abc = new ClientAbc(5);
// $res === 10
$res
=
$abc
->
add
(
2
,
3
);
// $res === 105
//
链式调用
$res === 105
$res
=
$abc
->
setA
(
100
)
->
add
(
2
,
3
);
// 如果把上面的模型的User添加到rpc
// RpcServer::add(User::class);
// 下面运行结果和上面一样
// $user_list = User::whereIn('id',[1,2,3])->with('articles')->findAll()->toArray();
```
上面是通过http协议调用的。你也可以通过其他协议调用。例如Tpc协议
...
...
@@ -297,4 +329,12 @@ class ClientAbc extends RpcClientTcp {
```
其中类
`RpcClientHttp`
,
`RpcClientTcp`
在框架里。
你可以复制到任何其他地市使用。
你也可以复制到任何其他地方使用。
## 更多请看文档
[
详细文档地址
](
https://www.kancloud.cn/vic-one/php-one/826876
)
[
使用列子-DEMO
](
https://github.com/lizhichao/one-demo
)
QQ交流群: 731475644
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录