PHP 프로그래머 가 서비스 관리 구조 에 대한 간단 한 설명(1)
다른 언어 와 도구 와 관련 되 지 않 고 우 리 는 PHP 자체 에서 서비스 관 리 를 어떻게 실현 하 는 지 에 대해 이야기 합 니 다.
본 원인 은 이미 다 쓴 서비스 관리https://github.com/CrazyCodes/Service-Govern.git
뭘 다스 려?
이 전문 명 사 는 관리 하 는 것 이 서비스 이 고 서 비 스 는 우리 의 프로젝트 라 는 것 을 쉽게 발견 할 수 있다.이런 서비스 방안 을 관리 하 는 것 을 서비스 관리 라 고 한다.
현재 서버 에는 네 가지 서비스 가 있 는데,각각
호출 서비스의 응용 을 우 리 는 그것 을 서비스 소비자 라 고 부른다.예 를 들 어
서비스 관리 가 고려 하 는 문 제 는 바로 이 네 가지 서 비 스 를 어떻게 관리 하고 대외 서 비 스 를 어떻게 하 며 서비스 과정 을 어떻게 감시 하 느 냐 하 는 것 이다.
실현 에 의존 하 다
서비스 관 리 를 실현 하기 전에 다음 과 같은 몇 가지 지식 을 알 아야 한다.
당분간 은 그것 을 통 해 다른 개발 언어 를 호출 할 수 있 는 방법 으로 이해 할 수 있다
rpc
RPC(Remote Procedure Call)-원 격 프로 세 스 호출 은 네트워크 를 통 해 원 격 컴퓨터 프로그램 에서 서 비 스 를 요청 하 는 것 이지 바 텀 네트워크 기술 을 알 필요 가 없 는 프로 토 콜 입 니 다.RPC 프로 토 콜 은 TCP 나 UDP 와 같은 일부 전송 프로 토 콜 의 존 재 를 가정 하여 통신 프로그램 간 에 정보 데 이 터 를 휴대 합 니 다.OSI 네트워크 통신 모델 에서 RPC 는 전송 층 과 응용 층 을 뛰 어 넘 었 다.RPC 는 네트워크 분산 다 중 프로그램 을 포함 한 응용 프로그램 개발 을 더욱 쉽게 한다.
RPC 는 클 라 이언 트/서버 모드 를 사용 합 니 다.요청 프로그램 은 클 라 이언 트 이 고 서비스 제공 프로그램 은 서버 입 니 다.우선,클 라 이언 트 호출 프로 세 스 는 프로 세 스 매개 변수 가 있 는 호출 정 보 를 서비스 프로 세 스 로 보 낸 다음 응답 정 보 를 기다 리 고 있 습 니 다.서버 에서 프로 세 스 는 호출 정보 가 도착 할 때 까지 수면 상 태 를 유지 합 니 다.호출 정보 가 도착 하면 서버 는 프로 세 스 파 라 메 터 를 얻 고 결 과 를 계산 하 며 답변 정 보 를 보 낸 다음 호출 정 보 를 기다 리 고 마지막 으로 클 라 이언 트 호출 프로 세 스 는 답변 정 보 를 받 고 프로 세 스 결 과 를 얻 은 다음 호출 실행 을 계속 합 니 다.
서비스 와 서비스 간 통신 은 RPC 를 통 해 통신 할 수 있 으 며,물론 UDP 등 도 선택 할 수 있다.
swoole
PHP 권 에서 세 기 를 뛰 어 넘 는 결과 물 을 사용 하 는 이 유 는 Swoole 자체 가 RPC 통신 을 지원 하기 때문에 본 장 은 Swoole Rpc 의 방법 을 통 해 소비자 와 서비스 제공 자 간 의 통신 을 실현 합 니 다.
RPC 통신 실현
서비스 관리 가 매우 중요 한 부분 이다.감지 되 지 않 은 상황 에서 소비자 A 가 서비스 제공 자 A,B,C 를 호출 하도록 해 야 한다.물론 실제 상황 에서 이것 은 영원히 불가능 하 다.메모리 공간 에 있 지 않 기 때문에 우 리 는 이런 사용 방식 을 스스로 모 의 해 야 한다.
$userSerivce = $client->client ('UserService');
$result = $userSerivce->getUserInfo (['user_id' => 100]);
var_dump($result);
소비자 내 에 UserService 도 없고 getUserInfo 방법 도 없다.이런 것들 은 모두 서비스 제공 자의 응용 에서 어떻게 호출 합 니까?우선 php 를 통한call 방법 은 존재 하지 않 는 방법 을 캡 처 합 니 다.
public function __call($name, $arguments)
{
$client = new ClientRpc($this->serviceName);
$response = $client->send ($this->serviceName, $name, $arguments);
return (json_decode ($response, true));
}
가 져 온 후 자신 이 쓴 send 방법 을 호출 하여 swoole 가 나 옵 니 다.
class ClientRpc
{
protected $client;
public function __construct($service_name, $centerConfig)
{
$this->client = new \swoole_client(SWOOLE_SOCK_TCP);
$center = Dispatcher::loadBalance ($service_name, $centerConfig);
$this->client->connect ($center['ip'], $center['port'], 0.5);
}
public function send($service, $action, $arguments)
{
$request = new Request();
$request->setService ($service);
$request->setAction ($action);
$request->setParameters ($arguments[0]);
// , , json
$this->client->send (json_encode ((array)$request));
return $this->client->recv ();
}
public function __destruct()
{
$this->client->close ();
unset($this->client);
}
}
더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.