Простой скрипт здесь:
a) постоянно считывает данные из сокета и сохраняет значения в ассоциативном массиве
b) постоянно считывать значения из stdin и отвечать t / f, если они уже существуют в ассоциативном массиве
a & b - случайные события, никак не связанные.
Хитрость заключается в доступе к массиву из обоих подпроцессов (поскольку помещение процесса в фоновом режиме порождает его как подпроцесс)
Я обдумываю лучшую стратегию, и возникает несколько идей, но мне интересно, есть ли у кого-нибудь что-нибудь лучше:
1) перенаправить ввод из сокета в stdin в качестве подпроцесса и обработать оба ввода в одном цикле while (размеры данных невелики, <30 символов, поэтому я предполагаю, что они останутся атомарными?). <br>
2) прочитать сокет, затем STDIN с небольшими (0,1?) Значениями тайм-аута при чтении, чтобы имитировать неблокирующий ввод / вывод.
3) ОБНОВЛЕНИЕ: записать данные сокета в файл (фактически, другой процесс записывает их непосредственно в файл), затем каждый раз, когда приходит запрос, чтобы проверить, существует ли значение, обрабатывают записи в файл, добавив их в массив (используйте блокировку файла).