Как использовать домашний компьютер в качестве Android / iOS Сервера приложений? - PullRequest
0 голосов
/ 17 марта 2020

Предположим, что приложение для Android / iOS требует сервера для работы. IP-адрес домашнего компьютера (с ОС на основе Debian) известен всем клиентам, но клиенты не знают IP-адреса друг друга. Клиент должен отправить один файл размером 40 КБ другому клиенту через Inte rnet в случайное время.

Некоторые характеристики:

  1. Ожидается, что соотношение времени автономной работы к онлайн-времени для каждого пункта назначения будет менее 5%.
  2. В минуту должно быть маршрутизировано до 2500 файлов (100 МБ).
  3. Передача должна быть безопасной.

Существуют различные подходы к передаче, такие как:

  1. Когда клиент / пользователь нажимает на «Отправить кнопку» внутри приложения, сервер предоставляет IP-адрес назначения для клиента. Затем пакеты отправляются в пункт назначения непосредственно через Inte rnet, не посещая сервер. Если пункт назначения находится в автономном режиме, сервер сохраняет файл для последующей отправки.

  2. Когда клиент нажимает кнопку отправки, сервер передает / направляет каждый пакет через себя в пункт назначения. Если пункт назначения находится в автономном режиме, сохраняет.

  3. Когда клиент нажимает кнопку отправки, сервер сохраняет весь файл. Если передача прошла успешно, файл удаляется, а если не сохраняется, сохраняется.

Я рекомендую использовать метод 1, так как он кажется более легким и менее ресурсоемким.


Итак, вопросы:

  1. Какой быстрый и безопасный протокол передачи файлов использовать в описанном выше случае?
  2. Как обеспечить достойную защиту сервера и данных при передаче?
  3. Сколько передач можно выполнять параллельно на домашнем компьютере? Можете ли вы привести примеры из скромного серверного оборудования?
  4. Если код сервера должен быть написан с нуля (прослушивание порта, запись потока в буфер ...), какие основные разделы кода для "основы" c "но безопасный сервер?

Я не очень знаком с серверами и не знаю, с чего начать. Существует множество концепций, таких как протоколы передачи, кодирование, авторизация, безопасность, интерфейс на стороне клиента, сокеты, кодирование на стороне сервера и т. Д. c. Было бы неплохо, если бы вы ответили простым и понятным языком.

...