Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
one
提交
7e5e5460
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 搜索 >>
提交
7e5e5460
编写于
12月 06, 2018
作者:
lzc828
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rpc
上级
5738bf06
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
125 addition
and
8 deletion
+125
-8
src/Facades/Redis.php
src/Facades/Redis.php
+26
-0
src/Swoole/RpcServer.php
src/Swoole/RpcServer.php
+71
-8
src/helper.php
src/helper.php
+28
-0
未找到文件。
src/Facades/Redis.php
0 → 100644
浏览文件 @
7e5e5460
<?php
namespace
One\Facades
;
use
One\Cache\File
;
/**
* Class Cache
* @package Facades
* @mixin \One\Cache\Redis
* @mixin \Redis
* @method string get($key, \Closure $closure = null, $ttl = 0, $tags = []) static
* @method bool delRegex($key) static
* @method bool del($key) static
* @method bool flush($tag) static
* @method bool set($key, $val, $ttl = 0, $tags = []) static
* @method Redis setConnection($key)
*/
class
Redis
extends
Facade
{
protected
static
function
getFacadeAccessor
()
{
return
\
One\Cache\Redis
::
class
;
}
}
src/Swoole/RpcServer.php
浏览文件 @
7e5e5460
...
...
@@ -32,7 +32,7 @@ class RpcServer
{
return
self
::
ret
([
'code'
=>
$code
,
'msg'
=>
$msg
'msg'
=>
$msg
]);
}
...
...
@@ -57,15 +57,15 @@ class RpcServer
return
self
::
error
(
400
,
'参数错误'
);
}
$c
=
$arr
[
'c'
];
$f
=
$arr
[
'f'
];
$c
=
$arr
[
'c'
];
$f
=
$arr
[
'f'
];
$id
=
$arr
[
'i'
];
$a
=
isset
(
$arr
[
'a'
])
?
$arr
[
'a'
]
:
[];
$t
=
isset
(
$arr
[
't'
])
?
$arr
[
't'
]
:
[];
$s
=
isset
(
$arr
[
's'
])
?
$arr
[
's'
]
:
0
;
$a
=
isset
(
$arr
[
'a'
])
?
$arr
[
'a'
]
:
[];
$t
=
isset
(
$arr
[
't'
])
?
$arr
[
't'
]
:
[];
$s
=
isset
(
$arr
[
's'
])
?
$arr
[
's'
]
:
0
;
try
{
$info
=
self
::
isAllow
(
$c
,
$f
);
$obj
=
null
;
$obj
=
null
;
if
(
isset
(
self
::
$ids
[
$id
]))
{
$obj
=
self
::
$ids
[
$id
];
}
...
...
@@ -88,7 +88,7 @@ class RpcServer
$res
=
$c
::
$f
(
...
$a
);
}
else
{
if
(
isset
(
$info
[
'cache'
]))
{
$k
=
self
::
getCacheKey
(
$c
,
$f
,
$a
,
$t
);
$k
=
self
::
getCacheKey
(
$c
,
$f
,
$a
,
$t
);
$res
=
Cache
::
get
(
$k
);
if
(
$res
!==
false
)
{
return
$res
;
...
...
@@ -174,4 +174,67 @@ class RpcServer
}
}
private
function
run
(
$class
)
{
foreach
(
$class
as
$c
)
{
$this
->
getClassInfo
(
$c
);
}
}
private
function
getClassInfo
(
$class
)
{
$info
=
[
'class'
=>
$class
];
$class
=
new
\
ReflectionClass
(
$class
);
$funcs
=
$class
->
getMethods
(
\
ReflectionMethod
::
IS_PUBLIC
);
foreach
(
$funcs
as
$func
)
{
$params
=
$func
->
getParameters
();
$info
[
'dir'
]
=
dirname
(
$func
->
getFileName
());
$arr
=
[];
$arr
[
'return'
]
=
$func
->
getReturnType
()
?
'\\'
.
$func
->
getReturnType
()
.
' '
:
''
;
foreach
(
$params
as
$param
)
{
if
(
$param
->
getType
())
{
$arr
[
'params'
][]
=
$param
->
getType
()
.
' $'
.
$param
->
getName
();
}
else
{
$arr
[
'params'
][]
=
'$'
.
$param
->
getName
();
}
}
if
(
!
isset
(
$arr
[
'params'
]))
{
$arr
[
'params'
]
=
[];
}
$info
[
'funcs'
][
$func
->
name
]
=
$arr
;
}
$this
->
createFacade
(
$info
);
}
private
function
createFacade
(
$info
)
{
$p
=
strrpos
(
$info
[
'class'
],
'\\'
);
$class
=
substr
(
$info
[
'class'
],
$p
+
1
);
$space
=
substr
(
$info
[
'class'
],
0
,
$p
);
$str
=
'<?php
namespace '
.
substr
(
$space
,
1
)
.
'\RpcHttpClient;
/**
* Class '
.
$class
.
'
* @mixin '
.
$info
[
'class'
]
.
PHP_EOL
;
foreach
(
$info
[
'funcs'
]
as
$f
=>
$f_info
)
{
$str
.
=
' * @method '
.
$f_info
[
'return'
]
.
$f
.
'('
.
implode
(
','
,
$f_info
[
'params'
])
.
') static'
.
PHP_EOL
;
}
$str
.
=
'*/
class '
.
$class
.
' extends RpcHttpClient
{
protected static function getFacadeAccessor()
{
return '
.
$info
[
'class'
]
.
'::class;
}
}'
;
$file
=
$info
[
'dir'
]
.
'/Facades/'
.
$class
.
'.php'
;
$dir
=
dirname
(
$file
);
if
(
!
is_dir
(
$dir
))
{
mkdir
(
$dir
,
0755
,
true
);
}
file_put_contents
(
$file
,
$str
);
}
}
src/helper.php
浏览文件 @
7e5e5460
...
...
@@ -208,4 +208,32 @@ function get_co_id()
}
}
/**
* 分布式redis加锁
* @param $tag
*/
function
redis_lock
(
$tag
)
{
$time
=
time
();
$key
=
'linelock:'
.
$tag
;
while
(
!
\
One\Facades\Redis
::
setnx
(
$key
,
$time
+
3
))
{
if
(
$time
>
\
One\Facades\Redis
::
get
(
$key
)
&&
$time
>
\
One\Facades\Redis
::
getSet
(
$key
,
$time
+
3
))
{
break
;
}
else
{
usleep
(
10
);
}
}
}
/**
* 分布式redis解锁
* @param $tag
*/
function
redis_unlock
(
$tag
)
{
$key
=
'linelock:'
.
$tag
;
\
One\Facades\Redis
::
del
(
$key
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录