受信側が負荷に対処できない場合、UNIX ドメイン ソケット ( AF_UNIX タイプ ) を介してデータをプッシュするクライアントにビジーの信号を送信できますか?
また
フロー制御を処理するために、ソケットの上にクライアント サーバー プロトコルが必要ですか?
受信側が負荷に対処できない場合、UNIX ドメイン ソケット ( AF_UNIX タイプ ) を介してデータをプッシュするクライアントにビジーの信号を送信できますか?
また
フロー制御を処理するために、ソケットの上にクライアント サーバー プロトコルが必要ですか?
UNIXドメインソケットへのブロッキング送信を確実に行うことができます。受信側の受信バッファーがいっぱいの場合、または未処理の (未配信の) 送信ソケット バッファーの数が多すぎる場合、送信者はブロックされます。
SOCK_STREAM UNIX ドメイン ソケットは、TCP ソケットのように機能します。SOCK_DGRAM UNIX ドメイン ソケットは UDP と同じように機能しますが、UNIX ドメイン データグラムは順序どおりの配信が保証されているのに対し、UDP ソケットは順序を変更したり削除したりできる点が異なります。(また、UNIX ドメイン ソケットを使用してファイル記述子を送信し、プロセス間でユーザー資格情報を渡すことができますが、どちらも TCP、UDP、またはパイプでは実行できません。)
したがって、順序どおりの配信はすべての種類の UNIX ドメイン ソケットによって保証されているため、受信者は他の処理でビジー状態になると受信を停止でき、送信者は利用可能なバッファー スペースがなくなると自動的にブロックされます (または通知されます)。ソケットでノンブロッキング操作を要求した場合、バッファ スペースがなくなることを確認します)。その後、受信者が再び受信を開始すると、送信者はさらに送信できるようになります。
これをプロトコルに含めない限り、サーバーがクライアントに情報の送信を一時停止するように指示する方法はありません。
サーバーがいつ「ビジー」であるかをある程度認識し、特定の信号を送り返すことを除いて (例: HTTP の 503 Service Unavailable)。クライアント側の接続を一定時間後にタイムアウトするように設定することもできます。タイムアウト イベントが発生した場合は、サーバーがビジーであると解釈します。