Блокирование как на стороне отправителя, так и на стороне получателя можно обойти с помощью неблокирующего ввода-вывода.
Дополнительные ограничения FIFO:
- Только один клиент за раз.
- После того, как клиент закрывает FIFO, серверу необходимо повторно открыть свою конечную точку.
- однонаправленная.
Вместо этого я бы использовал доменные сокеты UNIX , которые не имеют ни одного из вышеуказанных ограничений.
В качестве дополнительного преимущества, если вы хотите масштабировать его для связи между несколькими компьютерами, это практически не изменится. Например, просто возьмите страницу документации Python для socket и замените socket.AF_INET
на socket.AF_UNIX
, (HOST, PORT)
на filename
, и просто работает .
SOCK_STREAM
даст вам потоковое поведение; то есть две посылки могут быть объединены в один прием или наоборот. AF_UNIX
также поддерживает SOCK_DGRAM
: дейтаграммы гарантированно отправляются и читаются как единое целое или вообще не читаются. (Аналогично, AF_INET
+ SOCK_STREAM
= TCP, AF_INET
+ SOCK_DGRAM
= UDP.)