我正在创建一个chat app
在android.应用程序将有100-150个用户的时间(实时更改)。用户数据来自http webserver。我正在尝试创建一个实时用户列表,它将随着服务器上用户数据的变化而动态更改。有以下方法来实现这个问题- 1.我可以使用poll http
request每2分钟从服务器获取数据。有两种方法可以轮询First
,使用Timertask类。Second
创建服务类并使用警报管理器。哪种方法性能最好????后来我发现轮询是真实的的电池杀手。除了轮询实时用户列表解决方案之外,还有什么方法吗??像Facebook这样的现代应用程序使用哪些技术来实时更改视图中的数据?
4条答案
按热度按时间vuktfyat1#
为什么有必要?我不会这样做。你可以有一个服务,从你的服务器获取数据,并保存到本地数据库。当你将启动服务,这是你的选择!我不会下载每2分钟或类似的东西。也许你可以对用户的行动作出React。所以,如果他打开应用程序或点击聊天列表或类似的东西。
如果你真的需要它直接,你可以使用GoogleCloudMessaging,但我真的认为,这是一个可怕的想法!
n3schb8v2#
而不是使用轮询在reugular间隔,你应该使用GCM在我看来。每当有任何变化的用户,你只需发送一个推送通知到您的应用程序,然后在您的BroadCastReceiver只需点击一个web API获得最新的饲料。
z6psavjg3#
SyncAdapter/AccountManager对您的使用情况非常有用。Authenticator(在后台调用AccountManager)可以处理应用的身份验证。SyncAdapter可以处理从服务器到本地数据存储的定期同步。您不必使用AlarmManager自行实现。对于示例代码Sync Adapter
您的服务器将与SyncAdapter一起工作,没有太大的变化。唯一的区别是在您的客户端,例如,您将在扩展SyncAdapter的类的onPerformSync()中调用它们,而不是在AlarmManager中调用服务器的获取数据方法。
希望这个有用。
pieyvz9o4#
嘿,这是一个很好的问题,如果你正在考虑一个实时应用程序的规模,我认为你有一些选项来做到这一点,但实现其中一些你将不得不改变你的服务器的实现:
短HTTP轮询客户端向服务器发送大量频繁的请求。这就是您现在正在使用的方法。
长轮询向服务器发送单个请求,客户端正在等待响应。
**Web Sockets:**双向通信协议。这是一个很好的文章来思考这个问题:https://medium.com/walmartglobaltech/exploring-websocket-and-its-brief-implementation-for-android-cc461597e1dc这会使客户端和后端实现变得非常复杂。
**服务器端事件:**来自服务器的单向通信
在本文中,您将了解一些用于构建实时应用程序的常用协议:https://arena.im/post/most-popular-instant-messaging-chat-protocols
在本文中,您可以了解更多关于真实的通信的信息:https://www.telerik.com/blogs/real-time-communication-techniques
我认为在短时间内实现这一目标的最简单的选择是使用Firebase作为Firebase使用websockets在引擎盖下与他们的SDK,你可以得到几乎免费的学习Firebase.但在这种情况下,你将不得不改变你目前的网络服务器或看看你目前的后端可以与Firebase交互的方式.
作为后续我想告诉你这是一个棘手的功能,不要把它作为一个简单的任务。有很多方法来实现实时行为,每一个都有其优缺点。请做一个很好的研究这个问题。