0

这里不欢迎我认识的每个人讨论问题,所以我试图使其尽可能程序化。简而言之,我正在寻求更好的方法来做到这一点,或者优化我现有代码的方法。我的应用程序是通过使用Unity3D游戏引擎创建的,但它不是游戏。我只是发现引擎真的很容易使用,因此我正在使用一个名为OneSignal的服务网站。足够的漫无边际,任何更多,它变得与问题无关。

这是我第一次尝试创建一个不使用Sockets. 所以我的整体设计充其量是草率的。但是,这是我的设置:

目前我正在使用 HTTProtocol,在其中我使用 PHP 将所有逻辑存储在我的网络服务器上。基本上我正在做的是以一种JSON格式返回数据库结果,使用 C# 解析,SimpleJSON然后由应用程序处理以显示新消息等(基于应用程序/服务器上的“已读取”状态。)

这就是我眼中的问题所在。虽然我可以在收到新消息时向用户发送推送通知,但我将如何从服务器中提取所有这些消息?我想到的唯一合乎逻辑的方法是每 5-10 秒不断地轮询网络服务器并检查是否有任何新消息。如果有,则将它们添加到相应的消息列表中并应用“未读消息”属性。

那么手机是否应该将所有用户以前的消息存储在内存中?还是我应该每次都从数据库中提取所有消息?第二种选择似乎比简单聊天功能所需的带宽要多得多。但是,似乎存储在设备上的一堆消息会导致设备混乱,并且每次打开消息时从包含消息的平面文件存储中读取会(在我看来)使用相当多的磁盘 I/O。那么消息应该存储在内存中吗?然后你会遇到设备内存不足的情况,因为 androids 使用了很多,除非消息(线程)被删除,否则它永远不会被 GC 收集。

一位朋友告诉我,我应该只通过推送通知传递消息,并在收到消息时在设备上处理它们,但问题是推送通知并不总是被接收到,然后我们最终会得到很多丢失的消息。

如果我们不断地轮询数据库,那么我们将耗尽用户的电池。

我完全不知道在这里做什么,并希望得到一些指导。这是我的第一个 android 应用程序,虽然它非常非常好,但我推迟到最后的功能,因为我认为它会很简单(消息传递)结果证明是最困难的。

如果这是提出此类问题的不正确的地方,请您(附上您的立即否决票)在此所属的评论中发帖。

4

1 回答 1

1

您可以尝试在您的应用程序中实现 XMPP 客户端,因为 Unity3d 支持 .net/mono,您应该能够找到合适的库

推送通知并不真正适用于 IM(至少不是每条消息)

于 2015-05-15T19:10:07.920 回答