gRPC 및 Unix 도메인 소켓과의 프로세스 간 통신
참고 항목
이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 9 버전을 참조 하세요.
Important
이 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.
현재 릴리스는 이 문서의 .NET 9 버전을 참조 하세요.
작성자: James Newton-King
.NET은 gRPC를 사용하는 IPC(프로세스 간 통신)를 지원합니다. gRPC를 사용하여 프로세스 간 통신을 시작하는 방법에 대한 자세한 내용은 gRPC와의 프로세스 간 통신을 참조하세요.
UDS(Unix 도메인 소켓) 는 클라이언트와 서버가 동일한 컴퓨터에 있을 때 TCP보다 더 효율적인 널리 지원되는 IPC 전송입니다. 이 문서에서는 UDS를 통해 gRPC 통신을 구성하는 방법을 설명합니다.
필수 조건
- .NET 5 이상
- Linux, macOS 또는 Windows 10/Windows Server 2019 이상
서버 구성
Unix 도메인 소켓은 다음에서 구성된 다음에서 Program.cs
지원Kestrel됩니다.
var socketPath = Path.Combine(Path.GetTempPath(), "socket.tmp");
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.ListenUnixSocket(socketPath, listenOptions =>
{
listenOptions.Protocols = HttpProtocols.Http2;
});
});
위의 예제는 다음과 같습니다.
- ConfigureKestrel에서 Kestrel의 엔드포인트를 구성합니다.
- ListenUnixSocket을 호출하여 지정된 경로를 포함한 UDS를 수신 대기합니다.
- HTTPS를 사용하도록 구성되지 않은 UDS 엔드포인트를 만듭니다. HTTPS를 사용하도록 설정하는 방법에 대한 자세한 내용은 Kestrel HTTPS 엔드포인트 구성을 참조하세요.
클라이언트 구성
GrpcChannel
은 사용자 지정 전송을 통한 gRPC 호출을 지원합니다. 채널을 만들 때 사용자 지정 ConnectCallback가 포함된 SocketsHttpHandler로 구성할 수 있습니다. 콜백을 사용하면 클라이언트가 사용자 지정 전송을 통해 연결한 다음 해당 전송을 통해 HTTP 요청을 보낼 수 있습니다.
참고 항목
클라이언트 쪽 부하 분산 및 채널 상태와 같은 일부 연결 기능은 GrpcChannel
Unix 도메인 소켓과 함께 사용할 수 없습니다.
Unix 도메인 소켓 연결 팩터리의 예는 다음과 같습니다.
public class UnixDomainSocketsConnectionFactory
{
private readonly EndPoint endPoint;
public UnixDomainSocketsConnectionFactory(EndPoint endPoint)
{
this.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(this.endPoint, cancellationToken).ConfigureAwait(false);
return new NetworkStream(socket, true);
}
catch
{
socket.Dispose();
throw;
}
}
}
사용자 지정 연결 팩터리를 사용하여 채널을 만듭니다.
public static readonly string SocketPath = Path.Combine(Path.GetTempPath(), "socket.tmp");
public static GrpcChannel CreateChannel()
{
var udsEndPoint = new UnixDomainSocketEndPoint(SocketPath);
var connectionFactory = new UnixDomainSocketsConnectionFactory(udsEndPoint);
var socketsHttpHandler = new SocketsHttpHandler
{
ConnectCallback = connectionFactory.ConnectAsync
};
return GrpcChannel.ForAddress("http://localhost", new GrpcChannelOptions
{
HttpHandler = socketsHttpHandler
});
}
위의 코드를 사용하여 만든 채널은 Unix 도메인 소켓을 통해 gRPC 호출을 보냅니다.
ASP.NET Core