Android 安卓&x2B;NodeJS:客户机-服务器通信

Android 安卓&x2B;NodeJS:客户机-服务器通信,android,node.js,client-server,Android,Node.js,Client Server,我有一些关于开发Android应用程序的问题,该应用程序应该能够与NodeJS服务器通信 Android应用程序收集一些数据并将所有内容保存在.csv文件中。 现在需要将此文件上载到NodeJS服务器。NodeJS服务器应该保存文件并将内容存储在MongoDB中 我现在的问题是如何实现Android设备和服务器之间的通信 我知道如何使用带有DataOutputStream的HttpURLConnection将单个文件上载到NodeJS服务器。 但我需要的不仅仅是上传文件,因为我需要每个安卓设备的

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

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

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

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

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

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

我还考虑过通过套接字上传文件。但我不知道如何处理巨大的文件大小(5MB或更大)


我不是在寻找代码片段。我需要一些正确方向的提示。希望我的问题已经清楚地说明了,有人能帮我解决这个问题。

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

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

  • 路径参数:www.address.com/api/save/{clientId}/data
  • queryParam:www.address.com/api/save/data?c={clientID}
每个都唯一地标识客户机。这可以是您选择的任何方案。每次都必须构建HttpUrlConnection,因为URI是唯一的,而且很重要

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


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

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

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

  • 路径参数:www.address.com/api/save/{clientId}/data
  • queryParam:www.address.com/api/save/data?c={clientID}
每个都唯一地标识客户机。这可以是您选择的任何方案。每次都必须构建HttpUrlConnection,因为URI是唯一的,而且很重要

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


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

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

通过向套接字发送数据,一次上载1个文件,如下所示:

54::{filename:'myfilename.txt',length:13023,hash:'ss23vd'}xxxxxxxxxxx...
54
=JSON文本的长度
=长度和JSON之间的分隔符
{JSON}
=您需要的其他数据
xxx…
=13023字节的数据

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

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



我建议用插座好吗?可能不会。因为如果您必须同时上载其他文件,HTTP和node.js HTTP模块可能会做得更好。但是如果你能保证什么都不会改变,那么当然,为什么不。。。但是对于开发来说,这是一种不好的态度。

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

通过向套接字发送数据,一次上载1个文件,如下所示:

54::{filename:'myfilename.txt',length:13023,hash:'ss23vd'}xxxxxxxxxxx...
54
=JSON文本的长度
=长度和JSON之间的分隔符
{JSON}
=您需要的其他数据
xxx…
=13023字节的数据

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

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



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

非常感谢您的回答。我觉得这是一个很好的实现方法。非常感谢你的回答。我觉得这是一个很好的实现方法。谢谢你的回答。我还觉得用插座这样做会有点错误。我将尝试按照克莱在回答中所写的方式来实现它。谢谢你的回答。我还觉得用插座这样做会有点错误。我将尝试按照克莱在回答中所写的方式来实施它。