UNIX-сокет домена:Существует ли такое понятие, как сигнал «занято»?

StackOverflow https://stackoverflow.com/questions/1478975

  •  16-09-2019
  •  | 
  •  

Вопрос

Может ли Клиент передача данных через сокет домена UNIX (тип AF_UNIX) должна быть сигнализирована занятый если принимающая сторона не справится с нагрузкой?

ИЛИ

Должен ли быть протокол клиент-сервер поверх сокета для управления потоком?

Это было полезно?

Решение

Если вы не включите это в протокол, сервер не сможет сообщить клиенту, чтобы он приостановил отправку информации.

Другие советы

Вы определенно можете выполнить блокирующую отправку в сокет домена UNIX.Если буфер приема принимающей стороны заполнен или если количество ожидающих (недоставленных) буферов сокета отправки слишком велико, отправитель заблокируется.

SOCK_STREAM Доменные сокеты UNIX работают как TCP-сокеты.SOCK_DGRAM Сокеты домена UNIX работают аналогично UDP, за исключением того, что дейтаграммы домена UNIX гарантируют доставку в определенном порядке, тогда как сокеты UDP можно переупорядочивать или удалять.(Кроме того, сокеты домена UNIX можно использовать для отправки дескрипторов файлов и передачи учетных данных пользователя между процессами, но ни то, ни другое невозможно сделать с помощью TCP, UDP или каналов.)

Таким образом, поскольку доставка по порядку гарантируется всеми типами доменных сокетов UNIX, получатель может просто прекратить прием, когда он занят другими делами, а отправитель будет автоматически заблокирован, когда в буфере больше не будет свободного места (или будет уведомлен что буферного пространства больше нет, если они запросили неблокирующую операцию в своем сокете).Затем, когда получатель снова начнет получать, отправителю будет разрешено отправлять больше.

Кроме того, что сервер имеет некоторую информацию о том, когда он «занят», и отправляет обратно определенный сигнал (например,Служба HTTP 503 недоступна).Вы также можете настроить соединение на стороне клиента на таймаут через определенный промежуток времени, и если вы получите событие таймаута, интерпретируйте это как занятость сервера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top