Ответ 1
A читается из файла. Когда он достигнет конца файла, он перестает читать. Это нормальное поведение, даже если файл имеет значение fifo. Теперь у вас есть четыре подхода.
- Измените код считывателя, чтобы он продолжал читать после окончания файла. Это говорит, что входной файл бесконечен, и достижение конца файла - всего лишь иллюзия. Для вас это не подходит, потому что вам придется изменить код сервера minecraft.
-
Применить философию unix. У вас есть писатель и читатель, которые не согласны с протоколом, поэтому вы вставляете инструмент, который их соединяет. Как это бывает, в инструменте unix есть такой инструмент:
tail -f
.tail -f
продолжает чтение из своего входного файла даже после того, как видит конец файла. Попросите всех ваших клиентов поговорить с трубой и подключитеtail -f
к серверу minecraft:tail -n +1 -f client_pipe | minecraft_server &
-
Как уже упоминалось в jilles, используйте трюк: каналы поддерживают несколько авторов, и только закрываются, когда последний писатель уходит. Поэтому убедитесь, что есть клиент, который никогда не уходит.
while true; do sleep 999999999; done >client_pipe &
-
Проблема заключается в том, что сервер в основном предназначен для обработки одного клиента. Чтобы обращаться с несколькими клиентами, вы должны перейти на использование сокета. Подумайте о сокетах как "мета-трубах": подключение к сокету создает канал, и как только клиент отключается, этот конкретный канал закрыт, но сервер может принимать больше соединений. Это чистый подход, поскольку он также гарантирует, что вы не будете перепутывать данные, если два клиента будут подключаться в одно и то же время (используя каналы, их команды могут быть перемежены). Однако для этого требуется изменить сервер minecraft.