Достижение асинхронной двусторонней связи между процессами - PullRequest
0 голосов
/ 17 июня 2020

Я работаю над проектом, в котором мне нужно заставить 2 процесса (один написан на C ++, а другой на Python) работать асинхронно. В частности, им необходимо:

  • Никогда не использовать какое-либо ожидание или сон
  • У меня нет возможности определить, будет ли один из двух процессов готов к записи или чтению
  • Многопоточность не разрешена
  • Оба работают в l oop, поэтому в начале l oop они должны вызывать функцию чтения или записи и наоборот, когда они достигают конца l oop
  • Связь должна быть устойчивой: если процесс C ++ пишет, когда происходит сбой Python, данные должны быть отправлены независимо, и процесс Python должен получить эти данные после перезагрузки
  • Отправка данных не будет такой простой, как просто отправка сигналов. Это будут строки et c
  • Нулевой допуск на потерю данных
  • Общая память отключена, если только это не ЕДИНСТВЕННОЕ доступное решение

Сначала я Я смотрел на FIFO, но они кажутся ненадежными: отказоустойчивости просто нет (что странно, потому что она работает, когда я пытаюсь заставить 2 процесса C ++ разговаривать друг с другом, пока один из них вышел из строя) и многие строки мои Процесс C ++ отправляет на Python, просто по какой-то причине полностью потеряны. Наконец, двухсторонняя связь, похоже, вообще не работает, если я не создаю 2 FIFO, поскольку один и тот же процесс может читать и писать, прежде чем другой сможет прочитать

Теперь я смотрю на Unix Доменные сокеты, но они, похоже, используются только для синхронной связи.

Мне нужны некоторые рекомендации, чтобы понять, неправильно ли я использую FIFO (также известные как: FIFO действительно соответствуют моим запросам, и я просто делает что-то не так), или UDS, или есть другие доступные решения.

...