Как реализовать передачу данных между компьютером и сервером?
Я пишу телеграмм бота на библиотеке pyTelegramBotAPI. Подскажите пожалуйста, как можно реализовать передачу данных между сервером и компьютером? Мне нужно, чтобы бот, загруженный на Python Anywhere (в качестве сервера), отправлял команду приложению на компьютере, а после её выполнения отправлял на сервер ответ (допустим True или False). Я мог бы использовать библиотеку socket, но я слышал о том, что она может отправлять данные только по локальной сети. Насколько я знаю, она может отправлять данные не только по локальной сети, но для этого у компьютера должен быть так называемый 'белый' ip, но я не знаю будет ли у пользователя он.
Прошу подсказать возможно ли такое вообще, а если возможно то, как это можно реализовать и какими путями, если не прибегать к сторонним программам? Если простое решение есть в других языках, то я могу прибегнуть к ним, важно только, чтобы они могли работать вместе с Python.
(Сорри за грамматику)
Насколько я знаю, она может отправлять данные не только по локальной сети, но для этого у компьютера должен быть так называемый 'белый' ip, но я не знаю будет ли у пользователя он.
Для большинства обычных пользователей-обывателей интернета которые сидят в телефонах, домашних проводных интернетах, кафешках с wifi, невозможно зафиксировать постоянный IP. Он у них меняется либо раз в сутки либо по сеансу.
Но если IP сервера известен то пользователь может периодически сам ходить на сервер и спрашивать "не пришло-ли чего нового". Это меняет роли для передачи данных. И это создает некую холостую нагрузку. В течение суток пользователи могут создать нехилый трафик такими пробами.
Задача неизвестного IP:port частично решена в торрент-протоколах. Там пользователи "отмечаются" раз в несколько минут по трекерной ссылке и таким образом трекер владеет информацией о свежих парах IP:port которые присуствуют в сети. Вот. Эта схема тоже рабочая. Но нужен вот еще один сервис для трекинга.
У пользователя белого IP не будет почти гарантированно, это не бесплатное удовольствие и далеко не все провайдеры его вообще предоставляют.
PythonAnywhere также жёстко ограничивает адреса, на которые можно обращаться бесплатному аккаунту. Так что при таких вводных особо ничего не поделаешь.
Хотя можно инвертировать - пусть пользовали стучатся на сервер по старому доброму HTTP, а твоё приложение это обслуживает.
Вообще встаёт вопрос, а нахрена такая архитектура? Зачем пользователю вообще запускать у себя твоё приложение? Ботнет мутишь?
Нет, задумка бота в том, что через посыл команд в телеграмме управлять своим компьютером на расстоянии. Идея в том, чтобы команда приходила боту на сервере, он обрабатывал команду и отправлял на компьютер пользователя (где должна выполниться команда) все необходимые данные для выполнения этой команды (допустим отправка документа: где находиться, какой документ, и др). После выполнения команды, компьютер отправлял серверу ответ с указаниями, выполнилась ли команда, если выполнилась, то какой результат и так далее. А приложение для того, чтобы, собственно, управлять компьютером для того, чтобы как раз таки принимать входящие данные и отправлять ответ и для того, чтобы конкретно пользователь мог настраивать какие-то аспекты бота под себя, будь то язык бота конкретно для тебя или временем, когда боту не стоит отправлять рассылку.
Клиент (твой) комп инициирует соединение с сервером, обратно возможно только с белым IP. Или используй второй "сервер" к которому будут подключаться оба server 1 и клиент
Используйте технологию long polling. На питоне с asyncio и aiohttp она делается в 10 строк. Клиент подключаеися к серверу по http и тупо ждет, пока на сервере чего не случится. Ну и данные туда-сбда гонять можно. Затем клиент снова подключается и ждет...