2

tldr; 如何让 AWS 服务器上的程序持续监听数据包?

我想构建一个 iPhone 应用程序来收集传感器数据并将该数据发送到服务器。当服务器有足够的传感器数据时,它会根据数据构造一个分类器,并将该分类器发送到所有贡献的 iPhone 应用程序。我正在尝试在 AWS 上托管服务器。

我花了好几个小时阅读数据流、tcp 协议、amazon ec2、amazon emr、apache spark、spark streaming、amazon s3、restful 接口、cron 作业、amazon vpc 等,但我就是不能把这些一起。我只是不明白 iPhone 和 AWS 服务器是如何通信的。让我向您介绍我认为该应用程序应该如何工作。请纠正我思考过程中的任何错误,并让我知道我应该如何做这些事情。

1) The iPhone app collects some sensor data. 2) The iPhone app sends the data to the AWS server using HTTP or TCP. How do I do this? Do I need to supply the IP address of my server? 3) The server picks up the sensor data from the iPhone. This is where I'm really confused. How does this happen? Can I have a Python program hosted on AWS running in an infinite loop checking for data packets? Do I need to run a CRON job on AWS? Do I need to download a web server on an EC2 node? Can I use a third party streaming tool like Spark Streaming or Amazon Kinesis? Basically, how do I get a server-side program to continuously listen for data packets? 4) The server constructs the classifier when it has enough data. 5) The server sends the classifier to the iPhone app using HTTP or TCP.

我觉得我错过了一些非常基本的东西。我的主要问题是我不明白服务器上的程序(特别是 AWS ec-2 节点或 AWS EMR 集群)应该如何监听数据包。

4

2 回答 2

3

有多种方法可以实现这一点。您可以运行 Web 服务器并将 iPhone 应用程序发布到您的 Elastic Load Balancer。或者您可以编写一些其他类型的服务以在 EC2 服务器上运行,该服务器侦听 TCP 端口并仍然使用 Elastic Load Balancer。

就个人而言,我会设置一个 API Gateway 端点,它将所有发布到它的数据添加到Kinesis Stream中。您可以在此处阅读有关这样做的信息。然后,您可以在 EC2 实例上运行服务或 Lambda 函数来处理流数据。

关于服务器侦听数据包的一般问题只是基本的服务器端编程。您在绑定到某个 TCP 端口的服务器上运行了一项服务。然后,该服务运行您配置它在该端口上接收数据时运行的代码。

如果您想摄取 Kinesis Stream,那么您将使用 Kinesis Client Library 编写代码。或者,您可以编写一个在一个或多个 Web 服务器上运行的 REST API。或者您可以编写绑定到服务器上特定端口并侦听 TCP 数据包的代码,但我不建议在低级别执行此操作。如果需要,您还可以让 API Gateway 将数据直接发送到 Lambda 函数。

于 2015-12-14T01:12:20.583 回答
0

最简单的选择是使用新的 Amazon Kinesis Firehose 服务:

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

您只需要创建一个交付流,将您的数据提交到该流并将它们定向到 S3 存储桶。您还可以自动将数据加载到 Amazon Redshift。

于 2015-12-14T15:27:52.780 回答