@ofonarev

Как реализовать передачу данных между компьютером и сервером?

Я пишу телеграмм бота на библиотеке pyTelegramBotAPI. Подскажите пожалуйста, как можно реализовать передачу данных между сервером и компьютером? Мне нужно, чтобы бот, загруженный на Python Anywhere (в качестве сервера), отправлял команду приложению на компьютере, а после её выполнения отправлял на сервер ответ (допустим True или False). Я мог бы использовать библиотеку socket, но я слышал о том, что она может отправлять данные только по локальной сети. Насколько я знаю, она может отправлять данные не только по локальной сети, но для этого у компьютера должен быть так называемый 'белый' ip, но я не знаю будет ли у пользователя он.

Прошу подсказать возможно ли такое вообще, а если возможно то, как это можно реализовать и какими путями, если не прибегать к сторонним программам? Если простое решение есть в других языках, то я могу прибегнуть к ним, важно только, чтобы они могли работать вместе с Python.
(Сорри за грамматику)
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 4
mayton2019
@mayton2019
Bigdata Engineer
Насколько я знаю, она может отправлять данные не только по локальной сети, но для этого у компьютера должен быть так называемый 'белый' ip, но я не знаю будет ли у пользователя он.

Для большинства обычных пользователей-обывателей интернета которые сидят в телефонах, домашних проводных интернетах, кафешках с wifi, невозможно зафиксировать постоянный IP. Он у них меняется либо раз в сутки либо по сеансу.

Но если IP сервера известен то пользователь может периодически сам ходить на сервер и спрашивать "не пришло-ли чего нового". Это меняет роли для передачи данных. И это создает некую холостую нагрузку. В течение суток пользователи могут создать нехилый трафик такими пробами.

Задача неизвестного IP:port частично решена в торрент-протоколах. Там пользователи "отмечаются" раз в несколько минут по трекерной ссылке и таким образом трекер владеет информацией о свежих парах IP:port которые присуствуют в сети. Вот. Эта схема тоже рабочая. Но нужен вот еще один сервис для трекинга.
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
У пользователя белого IP не будет почти гарантированно, это не бесплатное удовольствие и далеко не все провайдеры его вообще предоставляют.
PythonAnywhere также жёстко ограничивает адреса, на которые можно обращаться бесплатному аккаунту. Так что при таких вводных особо ничего не поделаешь.
Хотя можно инвертировать - пусть пользовали стучатся на сервер по старому доброму HTTP, а твоё приложение это обслуживает.

Вообще встаёт вопрос, а нахрена такая архитектура? Зачем пользователю вообще запускать у себя твоё приложение? Ботнет мутишь?
Ответ написан
Viji
@Viji
Associate DevOps Engineer
Клиент (твой) комп инициирует соединение с сервером, обратно возможно только с белым IP. Или используй второй "сервер" к которому будут подключаться оба server 1 и клиент
Ответ написан
Комментировать
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Используйте технологию long polling. На питоне с asyncio и aiohttp она делается в 10 строк. Клиент подключаеися к серверу по http и тупо ждет, пока на сервере чего не случится. Ну и данные туда-сбда гонять можно. Затем клиент снова подключается и ждет...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы