服务端 rpc 启动后,如果保持过长时间,客户端请求会读到一个历史的值,如何实时读取到最新值
$server = new Server("tcp://0.0.0.0:1111");
$server->addMethod('test', $this);
$server->start();
$user = TcpClient::create('tcp://0.0.0.0:1111/', false);
$response = $user->test($this->token, ['code' => 'CNY']);
public function handle()
{
$server = new Server("tcp://0.0.0.0:1111");
$server->addMethod('test', $this);
$server->start();
}
public function test($token, $param)
{
return (new RpcUserService())->test($token, $param);
}
public function test($token, array $param)
{
if (!JWTAuth::setToken($token)->check()) {
return ['code' => 401, 'msg' => __('messages.登录过期'), 'data' => []];
}
if (!isset($param['currency_code'])) {
return ['code' => 402, 'msg' => __('messages.参数错误'), 'data' => []];
}
$user = JWTAuth::setToken($token)->authenticate();
$user = (new UserBalance())
->where(['id' => $user->id])
->where(['code' => $param['code']])
->select('balance')
->first();
return ['code' => 200, 'msg' => __('messages.成功'), 'data' => $user];
}
1
reneiw 2022-06-28 11:56:53 +08:00
你是不是用了单例?直接返回静态变量
|
2
MyEevy OP @reneiw 不是,工厂模式,奇怪的是,服务端重启后,可以正常。问题总是出现在一段时间后。文档中并没有说存在自动缓存策略
|
3
reneiw 2022-06-28 13:51:34 +08:00
你的 test 方法能不能贴下
|
5
reneiw 2022-06-28 17:03:37 +08:00
```
$user = (new UserBalance()) ->where(['id' => $user->id]) ->where(['code' => $param['code']]) ->select('balance') ->first(); ``` 不知道你这个有没有缓存 |
6
MyEevy OP @reneiw db 这块没做缓存,我尝试过直接 http 请求这个 service ,可以正常读取到最新值。rpc 重启前后读取值不一样。会与这些设置有关系吗,或者 linux 启动方式
Hprose\ResultMode::Normal Hprose\ResultMode::Serialized Hprose\ResultMode::Raw Hprose\ResultMode::RawWithEndTag |
7
reneiw 2022-06-28 17:19:25 +08:00
另谋高就吧,我承认我不行了
|