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