我在使用 RPC遠(yuǎn)程調(diào)用 插件,遠(yuǎn)程獲取信息。
當(dāng)我從其他服務(wù)器請(qǐng)求rpc到達(dá)后,我獲取到的參數(shù)是一個(gè)數(shù)組,如下代碼。
我現(xiàn)在需要將這個(gè)$args轉(zhuǎn)換成Request類型才能請(qǐng)求getProject,我需要如何轉(zhuǎn)換一下,或者其他方法才能請(qǐng)求?
namespace service;
class User
{
public function get($args)
{
// 我需要將這個(gè)$args轉(zhuǎn)換成Request類型才能請(qǐng)求getProject,我需要如何轉(zhuǎn)換一下,或者其他方法才能請(qǐng)求?
$result = (new ProjectController)->getProject($args ???);
return response_rpc_json(0, '獲取成功', $args);
}
}
這是我已經(jīng)寫好一個(gè)api接口,可以正常運(yùn)行,但同時(shí)我希望RPC接口也能直接調(diào)用,不要改動(dòng)這個(gè)方法。
class ProjectController
{
/**
* 提供搜索選項(xiàng)
* @param Request $request
* @return Response
* @throws BadRequestHttpException
*/
public function getProject(Request $request): Response
{
return show('Success');
}
}
可以改動(dòng)getProject的$request類型,解決問(wèn)題,但是這樣會(huì)為后面埋下很多坑。有沒(méi)有大佬能指點(diǎn)一二。
把業(yè)務(wù)放在service 層 接口 和 rpc 只處理接受參數(shù) 和 返回 等信息,這樣就共用的 現(xiàn)在只能這么做 rpc 和 框架的Request 兩碼事
我模擬了一個(gè)Request請(qǐng)求,然后傳遞過(guò)去,勉強(qiáng)可以解決問(wèn)題。
private function generateRequest($data, $uri): Request
{
$this->checkSecretKey($data);
$headers = [
'Host' => '127.0.0.1:8080',
'Content-Type' => 'application/x-www-form-urlencoded',
];
// 構(gòu)建請(qǐng)求頭
$headerBuffer = '';
foreach ($headers as $key => $value) {
$headerBuffer .= "$key: $value\r\n";
}
// 構(gòu)建請(qǐng)求體
$bodyString = http_build_query($data);
// 構(gòu)建完整的請(qǐng)求緩沖區(qū)
$buffer = "POST $uri HTTP/1.1\r\n" .
$headerBuffer . "\r\n" .
$bodyString;
// 創(chuàng)建 Request 對(duì)象
return new Request($buffer);
}
你這種 可以看一下 webman底層源碼 他是怎么寫的 你就怎么寫 不過(guò)不建議 rpc就是簡(jiǎn)單服務(wù)器端 高性能互相通信的,他不是處理表單的
因?yàn)槲业慕涌谝呀?jīng)寫好了,我想直接使用原來(lái)的api,如果重新適配一個(gè)service層的話,工程太大了。業(yè)務(wù),能跑起來(lái)就行,其他的暫時(shí)不重要。