Здравствуйте, суть задачи такова: мне нужно, в рамках одного бота, настроить связанность между хостами его поднимающими.
В базовой реализации бота, невозможно одновременное подключение к боту с разных хостов, только одно активное подключение, а мне требуется что бы один бот, мог взаимодействовать с операционной системой на которой он запущен, и таких систем может быть несколько.
- Создавать бота на каждую система не вариант, так-как есть необходимость доступа через одного бота, но например разными людьми, к разному железу. То есть моя задача реализовать управление хостами по средствам одного канала, и бизнес логика будет обрабатывать различных клиентов, для различных хостов.
Я пока вижу только такую реализацию: создать бота под каждый хост, и одного центрального бота, который будет управлять остальными в зависимости от клиента. Но мне кажется подобный подход слишком громоздким, неужели нельзя использовать асинхронный сокет, для доступа к боту? Что бы он слушал все подключённые машины которое поднимают соединение? Или я чего-то не так понимаю скорее всего) не бросайте тапки пожалуйста)
Михаил, Асинхронность строится на том, что код построен так чтобы эту самую асинхронность поддерживать. Я неблокирующий сокет могу полить в цикле до тех пор пока мне весь запрос не придёт, и это не будет асинхронностью.
javedimka, всё правильно. Только в этом и суть моего предложения, что нужен именно асинхронный код, для параллельного выполнения логики вне событийного цикла прослушивания. Реализовать блокирующую функцию безусловно можно по разному, но в конкретно моём случае разумнее использовать именно асинхронный подход.
alfss, так это он и есть) ещё никакой архитектуру нет вообще, это просто моя вольная фантазия о том как это можно было бы сделать, а не о том как я это буду делать) потому и пришёл сюда, что бы услышать правильный вариант решения сложившейся проблемы.
Сделать отдельную архитектуру с одним сервером и агентами на других серверах, отдельно сделать бота на основном сервере как интерфейс общения с этим сервером
неужели нельзя использовать асинхронный сокет, для доступа к боту? Что бы он слушал все подключённые машины которое поднимают соединение?
Не понятно какие подключённые машины должен слушать бот, вы имеете ввиду api телеграмма? Почитайте что такое long polling и webhook. Вы можете хоть со 100 машин слать сообщения от имени одного бота используя один токен. Это телеграм будет сообщать об событиях только одной машине. Бот может работать и без полинга или хуков, только на исходящие сообщения.
Если совсем извратиться можно настроить хуки от телеграмма на один сервер, там принимать request и класть его в какой нить брокер сообщений, паб/саб, стриминг.... на всех серверах подписаться на этот поток и обрабатывать эти реквесты, как если бы они пришли напрямую от телеграмма(вкладывая update в dispatcher.. или я не знаю как это реализовано конкретно в этой библиотеке). Отвечая с тем же токеном.