Всем привет.
Столкнулся с такой задачей.
В программе должно быть 4 параллельных процесса. Один читает post запросы, три остальных должны поддерживать сокеты со сторонними девайсами. Если прилетела от куда-то информация (из любого сокета или через post), то передать ее тут же в другое место (через сокет или опять же post запросом).
Как мне осуществить управление ими? Ну например, каждый процесс включать на секунду по очереди, прослушивать, и если тишина, то переключать на следующий процесс. Если при включении процесса поступает информация, то начать управлять этой информацией. Важно, что бы если процесс не запущен, но на него прилетела информация, то при запуске этого процесса, эта информация должна быть прочитана.
Желательно, чтобы девайсы через сокеты подключались на один и тот же порт
termitik, объясните подробнее, что вы имели ввиду этой фразой "передать ее тут же в другое место (через сокет или опять же post запросом)"? Да и в целом принцип работы и назначение системы лучше уточнить.
Сергей Горностаев, Смысл в чем. Есть приложение которое каким-то образом обрабатывает информацию на сервере (назовем программа1). Эта информация должна передаваться на стороннее устройство, ip адрес которого не известен. Скажем таких устройств 3 штуки. Таким образов, эти устройства должны подключиться к серверу по сокету.
То есть параллельно программе1, должна трудится программа2, которая будет получать json через POST запрос от приложения1 и передавать содержащуюся информацию в устройства. При этом все может происходит наоборот. От устройств приходит информация через сокет и программа2 отправляет POST запрос программе1. Главное условие чтобы программа1 и программа2 работали независимо друг от друга.
Для сокетов используется библиотека socket. Для чтения и отправки POST пока, что подключил flask.
Сергей Горностаев, Сейчас разбираюсь с тем как одновременно слушать 3 устройства по соекатам (желательно, чтобы они подключались к одному порту), ну и параллельно разбираюсь как все это кашу запустить работать вместе.
termitik, Flask и http-запросы в этой схеме выглядят лишними. Просто делаете два обычных socket-сервера, которые обрабатывают запросы как от клиентов, так и друг от друга.
Сергей Горностаев, то есть оптимальнее будет сделать так:
устройство -> (сокет) -> программа2 -> (сокет) -> программа1
и наоборот:
устройство <- (сокет) <- программа2 <- (сокет) <- программа1?
И все повесить на один порт или 3 устройства будут соединяться с программой2 по одному порту, а программа1 и программа2 будут соединяться по второму сокету?
Сергей Горностаев, хотя так, наверное, не получится. Так как функция отправки данных в программе1, должна быть одноразовая, появилась информация, вызывается функция, данные отправляются, функция завершается. Если сделать из этой функции клиента (при появлении информации подключаться по сокету к программе 2, отправить, закрыть), то как будет отправляться информация в обратную сторону, если клиент отключается.
termitik, во-первых, можно просто не отключаться, сервера могут постоянно держать соединения друг с другом и обмениваться информацией без переподключений. Во-вторых, ни что не мешает программе 2 при появлении информации открывать соединение с программой 1, если они знают адреса друг друга.
Сергей Горностаев правильно написал. разберись с каждым и выбери то что тебе надо. но это долгий путь
короткий - копай в сторону asyncio и aiohttp
и да прибудет с тобой сила :)