마지막 단계는 서버의 코드를 변경하는 것입니다. 스트리밍 응답의 경우 클라이언트에 데이터를 다시 보내는 방법은 route_guide 동기 예제에서 볼 수 있는 한 응답에 대해 매번 Write() 를 여러 번 호출하는 것입니다. 예를 들어 최대 서버 수명을 10초로 설정하려면 실행: 서버를 설정하려면 영토에서 원하는 서버 주소와 서버를 종료하기 전에 서버가 대기할 최대 시간을 알아야 합니다. 이 정보는 EnclaveConfig를 허용하는 초기화 메서드를 통해 전달될 수 있습니다. 이 예제에서는 grpc_server_config.proto라는 새 파일에서 EnclaveConfig를 확장합니다. 인사말 서비스에는 서버가 사용자의 이름을 포함하는 원격 클라이언트에서 단일 HelloRequest 메시지를 받은 다음 단일 HelloReply에서 인사말을 다시 보낼 수 있는 한 가지 방법이 있습니다. gRPC에서 지정할 수 있는 가장 간단한 RPC 유형입니다. 이 예제에서는 Asylo 내에서 gRPC가 어떻게 작동하는지 볼 수 있도록 사용자 지정 서버 영토를 작성하는 단계별 가이드를 제공합니다. 그러나 예제를 건너뛰고 서버를 더 빨리 가동하고 실행하려면 Asylo에 포함된 EnclaveServer 유틸리티를 사용할 수 있습니다. EnclaveServer는 단일 gRPC 서비스를 실행하는 전체 영토입니다. enclave_server.h에서 영토 서버를 찾을 수 있습니다. 알려진 번역이 없는 단어를 서버에 요청하는 경우 grpc_cli에는 오류 메시지가 표시되어야 합니다.
이 문서에는 세부 정보가 이 예제와 거의 관련이 없기 때문에 서버 구현이 포함되지 않습니다. 서버 구현에 대한 자세한 내용은 번역기_server_impl.h 및 번역기_server_impl.cc를 참조하십시오. 숫자 id 필드에는 위에서 설명한 기본 접근자 집합만 있지만 이름 및 전자 메일 필드에는 문자열에 대한 직접 포인터를 얻을 수 있는 가변_ getter및 추가 setter인 문자열이기 때문에 몇 가지 추가 메서드가 있습니다. 이메일이 아직 설정되지 않은 경우에도 mutable_email()을 호출할 수 있습니다. 자동으로 빈 문자열로 초기화됩니다. 이 예제에서 단수 메시지 필드가 있는 경우 가변_ 메서드도 있지만 set_ 메서드는 없습니다. 또한 더 깊은 Makefile 지식에 익숙하지 않은 사용자를위한 메모로 $@은 명령의 이름을 취하므로 2 번째 및 3 번째 빌드 명령에서는 각각 클라이언트와 서버가 될 것입니다. % 기호는 모든 일치를 찾는 모든 기호를 catch합니다. 마지막으로 ,$^ 기호는 빌드 명령 다음에 한 번에 하나씩 모든 파일을 사용하므로 mathtest.pb.o 다음 mathtest.grpc.pb.o, 그리고 예를 들어 두 번째 클라이언트 빌드를 보면 마지막으로 client.o입니다. 해결 방법은 Write()라고 부르지 않으면 완료 대기열에 새 작업을 수동으로 넣는 것입니다. 놀랍게도 이 작업을 간단하게 수행할 수 있는 방법은 없습니다. 이 문제를 해결하는 방법은 grpc::Alarm 개체를 사용하는 것이었습니다.
경보 개체는 만료되거나 취소될 때 완료 대기열 뒷면에 새 작업을 추가합니다. 차이점은 만료되면 이벤트가 성공 비트 집합을 갖게 된다는 것입니다. 이 예제에서는 서버에 두 개의 숫자 요청을 보내는 클라이언트를 만들고 서버는 이 두 숫자를 곱하고 결과를 클라이언트에 반환합니다. 이 예제에서는 translator_server.proto의 다음 서비스 정의를 사용합니다. 참고: 영토에서 인쇄한 로그 메시지는 –port=62831을 통과한 경우에만 여기에 있는 예제와 일치합니다. 이 예제에서는 grpc_server_driver.cc에서 드라이버를 구현합니다.