codenameone - 使用 ExecuteOfflineCommand 更有效地执行同步
问题描述
我想知道有没有办法识别 OfflineComamd 正在执行或内部标志或表示此命令已通过或标记已成功执行的东西。我在识别命令是否通过不稳定的互联网时遇到问题。我不断从数据库中检索记录并每次比较以查看是否已通过。但是由于我的应用程序的流程,我发现很难避免重复。是否有任何自动过程来确保自动执行命令或其他什么?
第二个问题,我可以使用 UITimer 检查 isOffline() 以确保表单上已连接互联网。服务器页面上是否有类似的东西,或者在哪里写查询以查看互联网是否断开连接。当控件移动到查询并且互联网断开连接时,我看到从表单页面打开的对话框被无限期冻结并且不会结束。我必须关闭并重新打开应用程序才能继续同步过程。同时我无法为对话框设置超时,因为我不确定完成同步过程需要多长时间。请指教。
扩展同一主题,但我创建了一个新问题只是为了更清楚地说明我的问题。 executeOfflineCommand 在 Android 上从存储执行时跳过命令
解决方案
无法知道连接是否会保持稳定,因为它需要了解未来。您可以像事务服务一样工作,服务器端使用两阶段提交的方法将离线命令作为事务处理。
在这种方法中,您有一个类似于以下的算法:
- 客户端向服务器发送命令
- 服务器为命令返回一个特殊的唯一 ID
- 客户端要求服务器执行唯一 ID
- 服务器确认命令已执行
如果前两个阶段没有完成,你就再做一次。可能发生的最糟糕的事情是服务器上的一些孤立命令。
如果第三个选项没有完成,你就再做一次。服务器知道它是否处理了命令,如果它已经被处理过,它只会确认它。
推荐阅读
- amazon-dynamodb - 使用分层键保存数据或复制 DynamoDB 表中的数据
- python - 有没有一种简单的方法来计算非简单自相交曲线的轮廓?
- java - 正则表达式验证字符串并在 JAVA 中返回值
- flask-sqlalchemy - SQALCHEMY - 按属性和 user_id 进行查询过滤
- javascript - 如何制作一个仅在某个特定时显示使用 ng-repeat 指令填充选项
- jquery - Rails 5 + Turbolinks + Jquery .ajax() 实际上在视图中显示 .js.erb
- docker - 如何在 docker 容器中使用 nestjs 运行 gRPC 微服务
- html - 如何实现垂直多个元素的网格行?
- php - 删除最后一个 id 会话
- sql - SQL - 选择日期范围内的行?