繁体   English   中英

如何将多个客户端的应用程序与静态Web服务同步?

[英]How to sync multiple Client's apps with restful webservice?

我正在从事一个涉及约5个Android客户的项目,这些客户正在查看项目列表并拥有这些项目的所有权。 一切都通过RESTful Java Web服务加载,数据存储在mysql服务器中。

项目列表已加载到应用程序中,其中包含ITEM-NAME和OWNER。 选择一个项目时,所有其他客户端应更新以显示该项目现在归他们所有。

每次选择一个项目时,都会将请求发送到Web服务中的同步块,并且此客户端将在确认没有其他人将其取走后取得该项目的所有权。

我现在的问题是:什么是将新选择的项目更新给所有客户的最佳实践,以免每n秒不必要地重新加载整个列表?

我想的方式是:每次更新发生时,datetime将存储在mysql上。 Android应用程序将每5秒左右检查一次此值。 如果它与存储在局部变量上的变量相同,则什么也不会发生。 如果不同,则重新加载整个列表并更新局部变量。

这样就足够了吗?

我还要指出的是,列表不会太广泛,因此无需单独更新特定项目。 整个列表被重新加载不会太重。

很抱歉,如果此类问题不是堆栈溢出问题,而是在其他地方将其发布的问题,则为idk。 如果不合适,请在这方面指导我。

先感谢您。

通常,短轮询是一个坏主意。 所有请求都会影响客户端和服务器的性能和带宽。 根据您的用例,几乎没有任何请求将保持不变。

更好的方法是让服务器通知客户端有关更改。 这通常是使用Firebase Cloud Messaging完成的 使用FCM,只要发生更改,您的服务器就可以通知所有已知的客户端。

或者,客户端可以使用“长时间轮询”:客户端发送HTTP请求,但是服务器直到更改发生后才响应。

另外,WebSockets可能是一个选项-但它可能不太适合您的REST体系结构。

短轮询

t01: Client: Hi Server, is there an update?
t02: Server: No
t03: Client: Hi Server, is there an update?
t04: Server: No
t05: Client: Hi Server, is there an update? 
t06: Server: Yes, here it is!
t07: Client: Hi Server, is there an update?
t08: Server: No
t09: Client: Hi Server, is there an update? 
t10: Server: Yes, here it is!

长轮询

t01: Client: Hi Server, is there an update?
t06: Server: Yes, here it is!
t07: Client: Hi Server, is there an update?
t10: Server: Yes, here it is!

Firebase云消息传递

t01: Client: Hi Server, I'm client123. Please keep me on track.
t06: Server: Hi client123. There was a change!
t10: Server: Hi client123. There was a change!

的WebSockets

t01: Client: Hi Server, here I am. 
t06: Server: There was a change!
t10: Server: There was a change!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM