У меня есть небольшой хобби-проект, в котором я пишу демон-оболочку в linux на C. Это значит, что он предназначен для запуска, мониторинга, выдачи команд и остановки других программ.Демон также обслуживает веб-интерфейс, где пользователи могут войти в систему и манипулировать запущенными программами.
Способ, которым он сейчас настроен, заключается в том, что всякий раз, когда программа записывает в свой стандартный вывод, этот вывод перенаправляется втруба.Всякий раз, когда кто-то обращается к программе через веб-интерфейс, веб-интерфейс начинает опросить демон через XMLHttpRequest (), затем демон проверяет, было ли что-то записано в канал, и отправляет ответ с тем, что было в канале ввремя.
Основная проблема заключается в том, что два (или более) пользователя вошли в систему и пытаются взаимодействовать с одной и той же программой.Поскольку веб-интерфейс эффективно опрашивает канал на предмет наличия чего-либо написанного, всякий раз, когда несколько пользователей входят в систему и осуществляют мониторинг одной и той же программы, выходные данные этой программы случайным образом отправляются одному из пользователей.Это, очевидно, плохо.
Единственное решение этой проблемы, которое я сейчас обдумываю, состоит в том, чтобы пометить меткой времени все выходные данные, которые генерирует программа, и сохранить эту информацию в чем-то вроде базы данных.Когда веб-интерфейс затем опрашивает демона с отметкой времени, он просто собирает все выходные данные, которые были записаны с тех пор, и отправляет их обратно.
Я думаю, что что-то вроде вышеупомянутого решения решит многопользовательскую проблему, ноЯ думал, что сделаю удар и запросю сообщество Stack Overflow об этой проблеме.Есть ли лучшее решение для такой проблемы?(Учитывая, что мне удалось описать проблему несколько понятным способом).