この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 658|答える: 5

[ヒント] .NET/C#プロセスはgRPCとUnixドメインソケット間で通信します

[リンクをコピー]
2025年8月11日 20:24:04に投稿 | | | |
要件:同じサーバー上で、プロセス同士は匿名パイプライン、名前付きパイプライン、メモリマッピングファイル、HTTP、TCP、標準入出力ストリームなどを使って通信します。 時にはサーバーが複数のアプリケーションを展開する必要がある場合、アプリケーション同士がgRPCやUnixドメインソケットを使って通信することが可能です。

復習
.NET/C# NamedPipeベースのNadPipeクロスプロセス通信[ソースコード使用]
https://www.itsvse.com/thread-10628-1-1.html

.NET/C#の親子プロセスはMemoryMappedFileを使って通信します
https://www.itsvse.com/thread-10983-1-1.html

.NET/C#の親子プロセスは標準的な入出力ストリームを使って通信します
https://www.itsvse.com/thread-10982-1-1.html

Unixドメインソケット

Unixドメインソケット(UDS)、ローカルソケット、またはプロセス間通信(IPC)ソケットは、同じUnixまたはUnix系オペレーティングシステム上で動作するプロセス間でデータを交換する通信エンドポイントです。

Unixドメインソケットという名称は、ソケットシステムリソースを作成する関数に渡されるドメインパラメータの値を指します。 同じ通信領域も選択されます。 [ 1 ]AF_UNIXAF_LOCAL

typeUDSの有効なパラメータ値は以下の通りです:

  • SOCK_STREAM(TCPと比較して)– ストリーム指向ソケットに使用されます
  • SOCK_DGRAM(UDPと比較して)– メッセージ境界を保持するためのデータグラム指向ソケット(ほとんどのUNIX実装と同様に、UNIXドメインデータグラムソケットは常に信頼性が高く、データグラムの順序を変えません)
  • SOCK_SEQPACKET(SCTPと比較して)– メッセージ境界を保持し、送信順にメッセージを配信する接続用のシーケンシャルパケットソケット


UDSツールはPOSIXオペレーティングシステムの標準コンポーネントです。

なぜUnixドメインソケットを使うのですか?

Unixドメインソケットは、単一マシン上でプロセス間通信を可能にします。 では、なぜTCP/IPよりも彼らを選ぶのでしょうか? 例えばTCP/IPでは、単一サーバー間の通信にループバックアドレス(localhost)を使用できます。 Windowsでは、なぜWindowsのネーミングパイプラインよりも彼らを選ぶのでしょうか?

一般的に、TCP/IPの代わりにUDSを使う理由はいくつかあります:

  • Unixドメインソケットは通常、TCP/IPを使うよりもオーバーヘッドが少なく、転送速度も速いです
  • TCP/IPソケットは有限のリソースですが、Unixドメインソケットには厳密な制限はありません
  • Unixドメインソケットはファイル形式で提供されているので、既知のパスを「発見」しやすいです
  • ファイルシステムとの統合は追加のセキュリティ層を加えます(ファイルパスにアクセスできなければソケットにアクセスできません)


最初のポイントは理解しやすいです。簡単にGoogle検索すれば、UDSやTCP/IPベンチマークはUDSよりも優れていることがわかります。なぜなら、UDSはレイテンシが大幅に低く、スループットも格段に高いからです。 これは主にUDSが同じサーバーとの通信に最適化されているためです。IP通信のためには、localhostは送信側と受信側の両方のIPスタックを通過しなければなりません

TCP/IPソケットは有限のリソースであり、 同時に使用できるソケットは最大65,535個までです。 問題を加えると、実際に利用可能な最大ソケット数TIME_WAITこの値よりはるかに少なくなる可能性があります。 localhost接続はこのプール内のソケットも消費します。 UDSを使うことでこの問題を巧みに回避できます。 TCP/IPソケットを使い切ることなく通信を可能にします。

サーバー

新しい.NET 8コンソールプロジェクトを作成し、SDKをMicrosoft.NET.Sdk.Webに変更し、以下のように設定します:

Greet.protoは以下のように構成されています:

コードは以下の通りです:

コンピレーションが開始された後、以下のように:



クライアント

新しい.NET 8コンソールプロジェクトを作成し、以下のライブラリを参照します:

gRPCインターフェースを呼び出す方法は10回呼び出され、各呼び出は200ミリ秒の間、コードは以下の通りです。

プロジェクトを開始し、実行が完了した後、以下の図のように:



参考:

ハイパーリンクのログインが見えます。
ハイパーリンクのログインが見えます。




先の:ジェットソン(1) ジェットソン オリン ナノスーパー 現像キット未開封
次に:Spring Bootにおけるウェブコンテナnettyとtomcatの比較
 地主| 2025年8月11日 20:57:04に投稿 |
HttpクライアントじゃないgRPCおよびUnixドメインソケット通信

サーバー

クライアント

以下に示すように:

 地主| 2025年8月12日 10:05:14に投稿 |
プロトコルタイプ。未指定プロトコルは指定されておらず、システムが自動的に選択します
 地主| 2025年8月12日 11:02:41に投稿 |
C#テストは通常通りUDSに接続できます


 地主| 2025年9月16日 15:26:30に投稿 |
nginxを使ってUnixドメインソケットをプロキシする(テストされていません
構成は以下の通りです:

UDSを優先する:サービスがNginxと同じマシン上で、高性能かつ低遅延を求めるなら、UDSが最良の選択肢です。
 地主| 2025年9月16日 17:11:05に投稿 |
Nginxのリバースプロキシphp-fpmはUDSを使って通信します
https://www.itsvse.com/thread-11068-1-1.html
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com