2015-12-14 2 views
1

tldr; Как вы получаете программу на сервере AWS для непрерывного прослушивания пакетов данных?Связь между iPhone и сервером AWS

Я хочу создать приложение для iPhone, которое собирает данные датчиков и отправляет эти данные на сервер. Когда на сервере достаточно данных датчиков, он строит классификатор из данных и отправляет этот классификатор всем входящим в него приложениям iPhone. Я пытаюсь разместить сервер на AWS.

Я потратил часы и часы на чтение данных о потоках данных, протоколах tcp, amazon ec2, amazon emr, apache spark, искровом потоке, amazon s3, поддерживаемых интерфейсах, заданиях cron, amazon vpc и т. Д., Но я просто могу " Положите кусочки вместе. Я просто не понимаю, как взаимодействуют iPhone и сервер AWS. Позвольте мне рассказать вам, как я думаю, что приложение должно работать. Пожалуйста, исправьте любые ошибки в моем процессе мышления и дайте мне знать, как я должен заниматься этим.

1) Приложение iPhone собирает данные датчиков. 2) Приложение iPhone отправляет данные на сервер AWS с использованием HTTP или TCP. Как мне это сделать? Нужно ли мне указывать IP-адрес моего сервера? 3) Сервер берет данные датчика с iPhone. Здесь я действительно смущен. Как это произошло? Могу ли я иметь программу Python, размещенную на AWS, запущенную в бесконечном цикле, проверяющем пакеты данных? Нужно ли мне запускать CRON-работу на AWS? Нужно ли загружать веб-сервер на узел EC2? Могу ли я использовать сторонний потоковый инструмент, такой как Spark Streaming или Amazon Kinesis? В принципе, как мне получить серверную программу для непрерывного прослушивания пакетов данных? 4) Сервер создает классификатор, когда у него достаточно данных. 5) Сервер отправляет классификатор в приложение iPhone с использованием HTTP или TCP.

Я чувствую, что мне не хватает чего-то невероятно простого. Моя основная проблема заключается в том, что я не понимаю, как программа на сервере (в частности, узел AWS ec-2 или кластер AWS EMR) должна прослушивать пакеты данных.

ответ

3

Есть несколько способов, которыми вы могли бы это сделать. Вы можете запускать веб-серверы и иметь сообщение приложения iPhone в своем балансе балансировки нагрузки. Или вы можете написать какой-либо другой тип сервиса для запуска на серверах EC2, которые прослушивают порт TCP и все еще используют Elastic Load Balancer.

Лично я бы установил конечную точку шлюза API, который переносит все данные, отправленные на него, и добавляет их в Kinesis Stream. Вы можете прочитать об этом here. Затем вы можете запустить службу на экземплярах EC2 или функцию Lambda, которая обрабатывает потоковые данные.

Ваш общий вопрос о сервере, который слушает пакеты данных, - это просто базовое программирование на стороне сервера. У вас есть служба, работающая на сервере, которая привязана к определенному TCP-порту. Затем служба запускает код, который вы настраиваете для запуска, когда он получает данные на этом порту.

Если вы хотите глотать поток Kinesis, вы должны писать код, используя клиентскую библиотеку Kinesis. Или вы можете написать REST API, который работает на одном или нескольких веб-серверах. Или вы можете написать код, который привязывается к определенному порту на сервере и прослушивает пакеты TCP, но я бы не рекомендовал делать это на этом низком уровне. Вы также можете иметь API-шлюз, чтобы отправить данные непосредственно в функцию лямбда, если хотите.

0

Самый простой вариант заключается в использовании нового сервиса Amazon Kinesis шланговой:

https://aws.amazon.com/blogs/aws/amazon-kinesis-firehose-simple-highly-scalable-data-ingestion/

Вам просто нужно создать поток доставки, представить свои данные в поток и направить их в ведро S3. Вы также можете автоматически загружать свои данные в Amazon Redshift.