根据zumero_sync的文档
如果需要从服务器中提取大量信息,则可能需要多次调用此函数。
在我的安卓应用程序中,如果使用Zumero,那就没问题了;我一直调用zumero_sync,直到返回值不以"0;"开始。
但是,现在我正在尝试编写一个管理脚本,它也与我的服务器dbfile同步。我希望使用sqlite3 shell,并让脚本通过命令行参数来执行。我需要在循环中调用zumero_sync ( SQLite不支持),以确保数据库完全同步。如果有必要,我可以在一个循环中调用sqlite3 (读取它的输出,查找"0;"),甚至编写一个C++应用程序来本地调用SQLite/Zumero函数。但是,如果一个zumero_sync就足够了,肯定会更容易一些。
我想我真正的问题是:是否可以更改zumero_sync,以便在返回之前完成同步?如果存在一些现有行为更有用的情况,那么可能会有一个参数来指定使用哪种模式?
发布于 2013-07-14 14:58:15
我在这里看到两个基本问题:
(1)为什么zumero_sync()的工作方式是这样的?
(2)它能否有不同的工作方式?
我将首先回答(2),因为它更容易:是的,它可以不同的工作方式。相反,我们可以(而且可能很快就会提到这一点)实现一个额外的函数,名为zumero_sync_complete(),它在循环中执行zumero_sync()的内核,并在同步完成后返回。
我们没有实现zumero_sync_complete(),因为它并没有增加太多的价值。这是一个简单的循环,所以你可以自己写。:-)
呃,除了不支持循环的脚本环境。就像sqlite3壳。
对(1)的答复:
Zumero同步协议的设计是为了使服务器能够灵活地返回部分结果,如果它想这样做的话。而且,为了减少服务器上的负载(并提高其可伸缩性),它经常想要做到这一点。
考虑到这一点,向客户机公开这一点的原因之一就是增加了客户端的灵活性。只要我们进行多次往返,我们就可以给客户一个机会,在它们之间做一些事情(比如,更新进度条)。
客户端在循环迭代之间可能要做的另一件事是处理错误。
或者,对于多线程客户端,它可能希望处理同步过程中在客户机上发生的更改。
这就产生了如何管理锁定的问题?在整个循环过程中,我们是否持有sqlite写锁?或者只有在绝对必要的时候?
一句话:一个健壮的应用程序可能希望实现循环本身,这样它就可以做出自己的决定,并保持对事物的完全控制。
但是,正如您所观察到的,sqlite3外壳没有循环。这不是一个应用程序。而且它没有线。或者进度条。因此,这是一个用例,在这个用例中,一种功能更简单、功能不太强大的zumero_sync()形式是有意义的。
https://stackoverflow.com/questions/17639269
复制相似问题