我正在从事一个涉及约5个Android客户的项目,这些客户正在查看项目列表并拥有这些项目的所有权。一切都通过RESTful Java Web服务加载,数据存储在mysql服务器中。
项目列表已加载到应用中,其中包含ITEM-NAME和OWNER。 选择一个项目后,所有其他客户应更新以显示该项目现在归他们所有。
每次选择一个项目时,都会将请求发送到Web服务中的同步块,并且此客户端将在确认没有其他人在他之前取走了该项目之后,对该项目进行所有权。
我现在的问题是:什么是将新选择的项目更新给所有客户的最佳实践,以免每n秒不必要地重新加载整个列表?
我的想法是: 每次更新发生时,日期时间将存储在mysql中。 Android应用程序将每5秒左右检查一次此值。如果它与存储在局部变量上的变量相同,则什么也不会发生。如果不同,则重新加载整个列表并更新局部变量。
足够了吗?
我还要指出,列表不会太广泛,因此无需单独更新特定项目;重新加载整个列表不会太重。
很抱歉,如果此类问题不是堆栈溢出问题,而是在其他地方将其发布的问题,则为idk。如果不合适,请在这方面指导我。
谢谢。
答案 0 :(得分:0)
通常,短轮询是一个坏主意。所有请求都会影响客户端和服务器的性能和带宽。根据您的用例,几乎没有任何请求将保持不变。
更好的方法是让服务器将更改通知给客户端。 这通常是使用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!
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!
t01: Client: Hi Server, here I am. t06: Server: There was a change! t10: Server: There was a change!