gRPC - 프로세스 간 통신 (IPC)
2022. 5. 27. 00:00ㆍASPNET/Grpc
반응형
IPC (프로세스 간 통신) 는 클라이언트와 서버가 같은 머신에 있는 경우 tcp 보다 효율적이다.
gRPC 에서 IPC 를 지원 하는 방법을 알아보자.
서버 구성
Program.cs
...
using Microsoft.AspNetCore.Server.Kestrel.Core;
...
// gRPC IPC 설정
string socketPath = Path.Combine(Path.GetTempPath(), "socket.tmp");
builder.WebHost.ConfigureKestrel(options =>
{
if (File.Exists(socketPath))
{
File.Delete(socketPath);
}
options.ListenUnixSocket(socketPath, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http2;
listenOptions.UseHttps();
});
});
클라이언트 구성
IPC/UnixDomainSocketConnectionFactory.cs
using System.Net;
using System.Net.Sockets;
namespace GrpcClient.IPC;
public class UnixDomainSocketConnectionFactory
{
private readonly EndPoint _endPoint;
public UnixDomainSocketConnectionFactory(EndPoint endPoint)
{
_endPoint = endPoint;
}
public async ValueTask<Stream> ConnectAsync(SocketsHttpConnectionContext _,
CancellationToken cancellationToken = default)
{
var socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified);
try
{
await socket.ConnectAsync(_endPoint, cancellationToken).ConfigureAwait(false);
return new NetworkStream(socket, true);
}
catch
{
socket.Dispose();
throw;
}
}
}
Program.cs
using Grpc.Net.Client;
using GrpcClient.IPC;
using GrpcInterface;
using System.Net.Sockets;
string socketPath = Path.Combine(Path.GetTempPath(), "socket.tmp");
var udsEndPoint = new UnixDomainSocketEndPoint(socketPath);
var connectionFactory = new UnixDomainSocketConnectionFactory(udsEndPoint);
var socketsHttpHandler = new SocketsHttpHandler
{
ConnectCallback = connectionFactory.ConnectAsync
};
var channel = GrpcChannel.ForAddress("https://localhost", new GrpcChannelOptions
{
HttpHandler = socketsHttpHandler
});
var client = new Greeter.GreeterClient(channel);
var reply = client.SayHello(
new HelloRequest { Name = "나는 천재" });
Console.WriteLine("Block Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
실행
관련영상
반응형
'ASPNET > Grpc' 카테고리의 다른 글
gRPC - 로깅 및 진단 (0) | 2022.05.26 |
---|---|
gRPC - 인터셉터 (0) | 2022.05.25 |
gRPC - JWT Token 을 통한 인증 처리 (16) | 2022.05.24 |
gRPC - Configuration (0) | 2022.05.23 |
grpc test - grpcui (0) | 2022.05.20 |