gRPC 디버깅 클라이언트 BloomRPC를 사용해 보았습니다.
BloomRPC
를 사용해 보았습니다. 서비스 개발시의 디버깅에 편리할 것 같습니다.BloomRPC란?
【Github】BloorRPC
gRPC GUI 클라이언트입니다.
JSON 형식으로 작성된 요청 데이터를 실행 중인 서비스로 전송하여 응답 데이터의 내용을 확인할 수 있습니다.
스트림에도 대응하고 있습니다.
스크린샷
설치
각 플랫폼에 대한 설치 프로그램이 게시되었습니다.
windows 버전 (bloomrpc-setup-1.3.1.exe)을 설치했습니다.
사용법
설치
각 플랫폼에 대한 설치 프로그램이 게시되었습니다.
windows 버전 (bloomrpc-setup-1.3.1.exe)을 설치했습니다.
사용법
스트림 조작
Interactive/manual 에 의해 스트림 송수신의 조작이 바뀝니다.
요청 스트림 제출
Interactive
manual
응답 스트림 수신
Interactive
manual
요청 헤더
METADATA 열에서 요청 헤더에 저장할 데이터를 지정할 수 있습니다.
아래 이미지는 Visual Studio에서 디버깅할 때 요청 헤더의 내용입니다. METADATA 열에 설명한 "id":"123"이 포함되어 있음을 알 수 있습니다.
확인에 사용한 proto 파일
syntax = "proto3";
import "timestamp.proto";
option csharp_namespace = "SampleIDL";
message SampleRequest
{
string Name = 1;
int32 Count = 2;
}
message SampleResponse
{
string Name = 1;
google.protobuf.Timestamp UpdateTime = 2;
}
message SampleResponseList
{
repeated SampleResponse Items = 1;
}
service SampleService
{
rpc Unary(SampleRequest) returns (SampleResponseList);
rpc ClientStream(stream SampleRequest) returns (SampleResponseList);
rpc ServerStream(SampleRequest) returns (stream SampleResponse);
rpc DuplexStream(stream SampleRequest) returns (stream SampleResponse);
}
확인에 사용한 서비스 구현
SampleRequest.Count 로 지정된 수만큼 SampleResponse 를 생성해 돌려주고 있을 뿐입니다.
class SampleServiceImpl : SampleService.SampleServiceBase
{
internal SampleServiceImpl() : base()
{
}
public async override Task<SampleResponseList> Unary(SampleRequest request, ServerCallContext context)
{
SampleResponseList list = new SampleResponseList();
foreach (SampleResponse response in GetResponses(request))
{
await RamdomDelayAsync();
list.Items.Add(response);
}
return list;
}
public async override Task<SampleResponseList> ClientStream(IAsyncStreamReader<SampleRequest> requestStream, ServerCallContext context)
{
SampleResponseList list = new SampleResponseList();
while (await requestStream.MoveNext())
{
foreach (SampleResponse response in GetResponses(requestStream.Current))
{
await RamdomDelayAsync();
list.Items.Add(response);
}
}
return list;
}
public async override Task ServerStream(SampleRequest request, IServerStreamWriter<SampleResponse> responseStream, ServerCallContext context)
{
foreach (SampleResponse response in GetResponses(request))
{
await RamdomDelayAsync();
await responseStream.WriteAsync(response);
}
}
public async override Task DuplexStream(IAsyncStreamReader<SampleRequest> requestStream, IServerStreamWriter<SampleResponse> responseStream, ServerCallContext context)
{
while (await requestStream.MoveNext())
{
foreach (SampleResponse response in GetResponses(requestStream.Current))
{
await RamdomDelayAsync();
await responseStream.WriteAsync(response);
}
}
}
private IEnumerable<SampleResponse> GetResponses(SampleRequest request)
{
for (int i = 0; i < request.Count; ++i)
{
yield return new SampleResponse()
{
Name = string.Format("{0} {1}", request.Name, i + 1),
UpdateTime = Timestamp.FromDateTimeOffset(DateTimeOffset.Now)
};
}
}
private Task RamdomDelayAsync()
{
return Task.Delay(random.Next(1000));
}
static Random random = new Random();
}
Reference
이 문제에 관하여(gRPC 디버깅 클라이언트 BloomRPC를 사용해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mxProject/items/116eda6819560ff5660a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)