【问题标题】:Android + NodeJS: Client-Server communicationAndroid + NodeJS:客户端-服务器通信
【发布时间】:2014-01-06 15:49:22
【问题描述】:

我有一些关于开发能够与 NodeJS 服务器通信的 Android 应用程序的问题。

Android 应用程序会收集一些数据并将所有内容保存在 .csv 文件中。 这个文件现在需要上传到 NodeJS 服务器。 NodeJS 服务器应该保存文件并将内容存储在 MongoDB 中。

我现在的问题是我应该如何实现 Android 设备和服务器之间的通信。

我知道如何使用带有 DataOutputStream 的 HttpURLConnection 将单个文件上传到 NodeJS 服务器。 但我需要的不仅仅是上传文件,因为我需要每个 Android 设备的唯一标识。

我考虑过使用用户的(加密的)Google 帐户电子邮件地址来区分设备。我不想知道谁上传了哪些数据,但我需要分别存储每个设备的数据。

问题是我不知道如何在设备和服务器之间进行通信。 如果我通过 HttpURLConnection 和 DataOutptStream 上传文件,我似乎只能上传文件而没有任何附加信息,例如设备的唯一密钥。

我还考虑过通过套接字上传文件。但我不确定如何处理大文件(5 MB 或更大)。

我不是在寻找代码片段。我宁愿需要一些正确方向的提示。希望我的问题得到了清楚的说明,有人可以帮助我解决这个问题。

【问题讨论】:

    标签: android node.js client-server


    【解决方案1】:

    在 Android 端使用 HttpUrlConnection,在 Node 端使用 RESTful 服务器将是一个简单的选择。

    您可以以 RESTful 方式将信息嵌入到 URL 中:

    • pathParam:www.address.com/api/save/{clientId}/data
    • queryParam:www.address.com/api/save/data?c={clientID}

    每个唯一标识客户端。这可以是您选择的任何方案。您每次都必须构建 HttpUrlConnection,因为 URI 是唯一且重要的!

    然后,服务器端可以按照您认为合适的方式路由 URL。 Node 有许多包可以帮助实现这一点(Express、Restify 等)。基本上,您将获取请求的主体以存储到您的数据库中,但其他参数也可用,因此它是一个唯一且独立的事务。

    编辑:您用于 RESTful 处理的包也可以为您流式传输大文件。一旦数据完全上传到服务器,就可以真正开始处理请求了。

    【讨论】:

    • 非常感谢您的回答。在我看来,这是实现它的好方法。
    【解决方案2】:

    使用套接字几乎同样简单。最困难的部分将是“制定自己的协议”,这实际上可能非常简单。

    通过像这样向套接字发送数据,一次上传 1 个文件:

    54::{filename:'myfilename.txt',length:13023,hash:'ss23vd'}xxxxxxxxxxx...
    

    54= JSON txt 的长度
    :: = 长度和 JSON 之间的分隔符
    {JSON} = 您需要的其他数据
    xxx... = 13023 字节数据

    然后,一旦所有数据都发送完毕,您就可以断开连接...或者如果您需要发送另一个文件,您就知道下一组数据应该在哪里。

    而且由于 node.js 是 javascript,您已经拥有出色的 JSON 支持来为您解析 JSON。


    我会建议使用套接字吗?可能不是。因为如果您必须同时上传其他文件,HTTP 和 node.js HTTP 模块可能会做得更好。但如果你能保证什么都不会改变,那当然,为什么不……但这是对发展的一种不良态度。

    【讨论】:

    • 感谢您的回答。我也觉得用套接字做这件事有点不对。我将尝试按照 Clay 在他的回答中所写的方式来实现它。
    猜你喜欢
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多