Простого скрипта здесь:BASH: Лучшая архитектура для чтения из двух входных потоков
а) постоянно чтения из сокета и хранения значений в ассоциативном массиве
б) постоянно считывать значения из стандартного ввода и реагировать t/f, если они уже существуют в ассоциативном массиве
a & b - случайные события, не связанные каким-либо образом.
Хитрость заключается в доступе к массиву от обоих подпроцессов (с момента ввода процесса в фоновом режиме запускает его как подпроцесс)
Я продумывание лучшей стратегией, и происходят несколько идей, но мне интересно, если у кого есть что-нибудь лучше в виде:
1) перенаправляют вход от розетки до стандартного ввода как подпроцесс и обрабатывать оба вход в один, а цикл (размеры данных невелики, < 30 символов, так что я предполагаю, что они будут оставаться атомными ?).
2) прочитайте разъем, затем STDIN с малыми значениями времени ожидания (0,1?) При чтении, чтобы имитировать неблокирующий ввод-вывод.
3) UPDATE: записать данные сокета в файл (фактически, другой процесс записывает его непосредственно в файл), то каждый раз, когда приходит запрос на проверку, существует ли это значение, обрабатывайте записи в файле, добавив их в массив (используйте блокировку файлов).
Похоже, что у вас есть правильная идея. Есть ли причина сделать это в bash в отличие от другого языка? – Slartibartfast
Хороший вопрос. Нет, нет веских оснований использовать bash над другим языком. Баш прост и мал, это единственная причина (и у меня есть еще 5 других сценариев bash, которые выполняют аналогичные задачи проверки подлинности/ведения журналов/пользователей, поэтому хорошо поддерживать единую платформу) –