我对开发一个能够与NodeJS服务器通信的Android应用程序有一些疑问。
Android应用程序收集一些数据并将所有内容保存在.csv文件中。 此文件现在需要上传到NodeJS服务器。 NodeJS服务器应该保存文件以及将内容存储在MongoDB中。
我现在的问题是如何实现Android设备和服务器之间的通信。
我知道如何使用带有DataOutputStream的HttpURLConnection将单个文件上传到NodeJS服务器。 但我需要的不仅仅是上传文件,因为我需要每个Android设备的唯一标识。
我考虑过使用用户的(加密)Google帐户电子邮件地址来区分设备。我不知道谁上传了哪些数据,但我需要分别存储每个设备的数据。
问题是我不知道如何在设备和服务器之间进行通信。 如果我通过HttpURLConnection和DataOutptStream上传文件,我似乎只能上传文件而不需要任何其他信息,例如设备的唯一密钥。
我还考虑过通过套接字上传文件。但我不知道如何处理大文件(5 MB或更多)。
我不是在寻找代码片段。我宁愿需要一些正确方向的提示。希望我的问题清楚明确,有人可以帮我解决这个问题。
答案 0 :(得分:3)
在Android端使用HttpUrlConnection,在Node端使用RESTful服务器将是一个简单的选择。
您可以以RESTful方式将信息嵌入到URL中:
每个唯一标识客户端。这可以是您选择的任何方案。每次都必须构建HttpUrlConnection,因为URI是唯一的,而且很重要!
然后服务器端可以根据您的需要路由URL。 Node有许多软件包来帮助实现(Express,Restify等)。基本上你会抓住存储到你的数据库中的请求的主体,但是其他参数也是可用的,所以它都是一个独特且分离的事务。
编辑:您用于RESTful处理的包也可以为您流式传输大型文件。一旦数据完全上传到服务器,就可以真正开始处理请求。
答案 1 :(得分:1)
使用套接字几乎同样容易。最困难的部分是“制定自己的协议”,实际上可能非常简单。
通过将数据发送到套接字来实时上传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模块可能会做得更好。但是,如果你能保证什么都不会改变,那么肯定,为什么不呢......但这对于发展来说是一种糟糕的态度。