Я хотел бы использовать файл в качестве временного буфера для подключения двух процессов netcat. Мне нужно использовать буфер, потому что данные отправляются и запрашиваются на каждом конце с разными интервалами. Я хочу использовать файл вместо фактического mkfifo
буфер, потому что данные часто превышают 64 КБ.
Это то, что у меня есть, но не работает. Файл никогда не записывается, или, по крайней мере, он не записывается таким образом, чтобы процесс издателя мог его прочитать.
# receiver
while true; do nc -l 8000 > /tmp/my_file; done
# publisher
while true; do nc -l 9000 < /tmp/my_file; done
Я отправляю получателю такой текст:
echo "hello, world" | nc localhost 8000
И я пытаюсь прочитать это от издателя так:
curl localhost:9000
Но curl
возвращает ошибку типа «пустой ответ от сервера», потому что «привет, мир» никогда не было написано.
Я тестирую это в Mac OS, но в конечном итоге мне нужно сделать то же самое в Linux (скорее всего, Alpine).
В некоторых системах команда «nc» требует, чтобы вы указали опцию «-p» перед номером порта. Попробуйте добавить "-p" перед 8000 и 9000 следующим образом:
# receiver
while true; do nc -l -p 8000 > /tmp/my_file; done
# publisher
while true; do nc -l -p 9000 < /tmp/my_file; done