2

我在一家港口公司工作,该公司开发软件来管理港口运营。我目前正在为数据收集器开发一个项目。

数据收集器是一种便携式设备,用于收集信息,然后将其用于特定系统、库存控制、消耗控制、一般报告。

没错,我正在用php开发一个软件,以便操作员可以管理集装箱港口和港口庭院中发生的其他操作。

在那之前我完全没有问题,但是由于港口的院子是一个受很多干扰因素的地方,可能会出现信号丢失,因为工作的应用程序需要有wi-fi连接。当它失去与 php 服务器的通信时,应用程序将停止工作。

我们曾考虑在每个收集器上安装一个 apache 服务器,但意识到这是不可行的。

所以我来问你一个建议,如果发生可能的信号丢失,我会保存用户输入的数据。

4

1 回答 1

1

我假设您至少可以控制客户端设备,因此可以确定它们使用的是现代浏览器。因此,您可以使用 HTML5 数据存储(Javascript 中的 localStorage 对象)在客户端设备上记录数据。当他们按下按钮、填写表格或其他内容时,而不是将数据上传到服务器,而是使用 Javascript 将其写入本地存储。完成后,看看是否可以将本地存储的内容上传到服务器(使用 Ajax)。如果可以的话,很好,将其从本地存储中删除;如果不留在那里进行下一次尝试。

我认为,您需要添加一个按钮来刷新任何剩余的数据,并训练他们在返回基地时使用它,否则数据将不会上传。那个按钮,也许是整个界面,需要一个成功的指示,也许还有多少还没有上传。或者可能让数据收集页面定期尝试上传任何未完成的数据。如果他们(尝试)转到其他数据上传未完成的页面,则会出现问题 - 您可以通过在离开页面时发出一个 javascript 事件来在某种程度上警告他们,该事件可以告诉他们“数据上传未完成”。由于存储是永久的,甚至可以关闭浏览器或关闭设备,

此外,您需要一种可靠的方法来检查两端是否同意数据已上传。仅仅依靠 Ajax 调用的成功响应或缺少响应是不够的,因为即使数据已成功上传,您也可能永远看不到它。一种方法可能是在浏览器端使用 ID 标记数据(可能基于会话 ID 和时间),这样如果您没有从服务器得到肯定的响应,您认为它在浏览器端失败了,但是如果它实际上没有失败,则服务器已经存储了 id,因此稍后再次上传的相同数据将被视为已经完成,因此不会被处理两次。

这样做的另一个好处是,即使您在范围内但链接速度较慢,用户也不必等待上传完成即可继续下一个数据输入。

于 2012-08-28T20:09:40.580 回答