Improve gRPC IPC doc (#26660)
Co-authored-by: Luke Latham <1622880+guardrex@users.noreply.github.com> Co-authored-by: Wade Pickett <wpickett@microsoft.com>pull/26668/head
parent
1034e16f64
commit
f6f095c2bd
|
@ -4,18 +4,43 @@ author: jamesnk
|
|||
description: Learn how to use gRPC for inter-process communication.
|
||||
monikerRange: '>= aspnetcore-5.0'
|
||||
ms.author: jamesnk
|
||||
ms.date: 09/16/2020
|
||||
ms.date: 08/08/2022
|
||||
uid: grpc/interprocess
|
||||
---
|
||||
# Inter-process communication with gRPC
|
||||
|
||||
By [James Newton-King](https://twitter.com/jamesnk)
|
||||
|
||||
gRPC calls between a client and service are usually sent over TCP sockets. TCP was designed for communicating across a network. [Inter-process communication (IPC)](https://wikipedia.org/wiki/Inter-process_communication) is more efficient than TCP when the client and service are on the same machine. This document explains how to use gRPC with custom transports in IPC scenarios.
|
||||
Apps on the same machine can be designed to communicate with each other. Operating systems provide technologies for enabling fast and efficient [inter-process communication (IPC)](https://wikipedia.org/wiki/Inter-process_communication). Popular examples of IPC technologies are named pipes and Unix domain sockets.
|
||||
|
||||
## Server configuration
|
||||
.NET provides support for inter-process communication using gRPC.
|
||||
|
||||
Custom transports are supported by [Kestrel](xref:fundamentals/servers/kestrel). Kestrel is configured in `Program.cs`:
|
||||
## Get started with gRPC
|
||||
|
||||
gRPC calls are sent from a client to a server. To communicate between apps on a machine with gRPC, at least one app must host an ASP.NET Core gRPC server.
|
||||
|
||||
ASP.NET Core and gRPC can be hosted in any app using .NET Core 3.1 or later by adding the `Microsoft.AspNetCore.App` framework to the project.
|
||||
|
||||
[!code-xml[](~/grpc/interprocess/Server.csproj?highlight=4-6)]
|
||||
|
||||
The preceding project file:
|
||||
|
||||
* Adds a framework reference to `Microsoft.AspNetCore.App`. The framework reference allows non-ASP.NET Core apps, such as Windows Services, WPF apps, or WinForms apps to use ASP.NET Core and host an ASP.NET Core server.
|
||||
* Adds a NuGet package reference to [`Grpc.AspNetCore`](https://www.nuget.org/packages/Grpc.AspNetCore).
|
||||
* Adds a `.proto` file.
|
||||
|
||||
## Configure Unix domain sockets
|
||||
|
||||
gRPC calls between a client and server on different machines are usually sent over TCP sockets. TCP was designed for communicating across a network. [Unix domain sockets (UDS)](https://wikipedia.org/wiki/Unix_domain_socket) are a widely supported IPC technology that's more efficient than TCP when the client and server are on the same machine. .NET provides built-in support for UDS in client and server apps.
|
||||
|
||||
Requirements:
|
||||
|
||||
* .NET 5 or later
|
||||
* Linux, macOS, or [Windows 10/Windows Server 2019 or later](https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/)
|
||||
|
||||
### Server configuration
|
||||
|
||||
Unix domain sockets (UDS) are supported by [Kestrel](xref:fundamentals/servers/kestrel), which is configured in `Program.cs`:
|
||||
|
||||
```csharp
|
||||
public static readonly string SocketPath = Path.Combine(Path.GetTempPath(), "socket.tmp");
|
||||
|
@ -42,12 +67,10 @@ public static IHostBuilder CreateHostBuilder(string[] args) =>
|
|||
The preceding example:
|
||||
|
||||
* Configures Kestrel's endpoints in `ConfigureKestrel`.
|
||||
* Calls <xref:Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions.ListenUnixSocket*> to listen to a [Unix domain socket (UDS)](https://wikipedia.org/wiki/Unix_domain_socket) with the specified path.
|
||||
* Calls <xref:Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions.ListenUnixSocket%2A> to listen to a UDS with the specified path.
|
||||
* Creates a UDS endpoint that isn't configured to use HTTPS. For information about enabling HTTPS, see [Kestrel HTTPS endpoint configuration](xref:fundamentals/servers/kestrel/endpoints#listenoptionsusehttps).
|
||||
|
||||
Kestrel has built-in support for UDS endpoints. UDS are supported on Linux, macOS and [modern versions of Windows](https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/).
|
||||
|
||||
## Client configuration
|
||||
### Client configuration
|
||||
|
||||
`GrpcChannel` supports making gRPC calls over custom transports. When a channel is created, it can be configured with a `SocketsHttpHandler` that has a custom `ConnectCallback`. The callback allows the client to make connections over custom transports and then send HTTP requests over that transport.
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<ItemGroup>
|
||||
<FrameworkReference Include="Microsoft.AspNetCore.App" />
|
||||
<PackageReference Include="Grpc.AspNetCore" Version="2.49.0" />
|
||||
<Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
Loading…
Reference in New Issue