У меня есть два процесса, которые общаются через доменные сокеты Unix в настройке первичной / реплики.Реплика должна периодически запрашивать у руководства первичную информацию, но она должна делать это только в том случае, если первичная организация указывает, что готова предложить указанную инструкцию.Если первичный сервер готов, реплика должна запросить первичный сервер и дождаться ответа;в противном случае он должен продолжить выполнение своей текущей задачи.
Обычно я бы использовал семафор POSIX, чтобы сообщить реплике, готов ли основной сервер - он быстрый и легкий.К сожалению, я работаю над исследовательской системой, которая не поддерживает общую память POSIX.Следовательно, Unix-сокеты - это все, что у меня есть.
Я знаю, что неблокирующие чтения выполняются довольно быстро, поэтому мне интересно, могу ли я сделать что-то вроде этого:
- Открытьсоединение между репликой и основной.
- Установите конец реплики неблокирующим.
- Периодически проверяйте, может ли реплика читать с основной.
- Если чтение завершается успешно, переключить сокет на блокировку и запросить основной .После завершения запроса возвращает сокет в неблокирующее состояние .
- Если чтение не удалось, продолжайте до следующей проверки.
Можно ли повторно переключатьсясокет между блокирующим и неблокирующим поведением?