Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
客户端服务器Android应用程序的最佳技术_Android_Multiplayer - Fatal编程技术网

客户端服务器Android应用程序的最佳技术

客户端服务器Android应用程序的最佳技术,android,multiplayer,Android,Multiplayer,我需要为学校制作一个在Android上运行的应用程序。实际上有两个应用程序,一个客户端和一个服务器。服务器运行在PC上,而客户端运行在Android设备上。我想知道这方面最好的技术是什么。我知道RMI和WebServices没有在Android中实现,那么有什么替代方案(除了以传统方式与套接字通信之外)。我没有研究的另一个选择是REST,但我需要能够在另一个客户做了某件事后通知客户,类似于翻盘基础游戏,玩家a通知玩家B他已经采取了行动。 正如我所说,套接字可以做到这一点,但与RMI和WebSer

我需要为学校制作一个在Android上运行的应用程序。实际上有两个应用程序,一个客户端和一个服务器。服务器运行在PC上,而客户端运行在Android设备上。我想知道这方面最好的技术是什么。我知道RMI和WebServices没有在Android中实现,那么有什么替代方案(除了以传统方式与套接字通信之外)。我没有研究的另一个选择是REST,但我需要能够在另一个客户做了某件事后通知客户,类似于翻盘基础游戏,玩家a通知玩家B他已经采取了行动。
正如我所说,套接字可以做到这一点,但与RMI和WebService相比,它们的级别很低,只想将它们作为最后的手段使用

保持简单。使用REST并让客户端轮询更新

此外,如果您到达需要扩展的位置,此解决方案实际上相当容易扩展,因为您的服务器不需要维护连接。由于特定服务器和客户机之间没有共享状态(应用程序和客户机之间有共享服务器),因此可以轻松添加更多服务器来处理轮询,并将它们放在负载平衡器后面


您还可以添加缓存,以便轮询只获得完全相同的响应,而不会导致响应的重新计算。然后,当游戏状态更改时,您将能够让后端游戏状态服务器更新缓存。这将使您的投票频率更高,并且仍然具有非常灵活、可扩展的体系结构。

对于基于回合的游戏,您可以查看传统上用于即时消息传递的XMPP(例如)。创建一个用于推送通知的游戏也很有趣

您还可以研究HTTP流,它本质上是一个无休止的HTTP响应,在该响应中,玩家的移动被反馈到


或者,您可以研究更适合实时游戏但仍然适用的二进制消息传递系统,例如(基于平滑转弯的游戏有什么问题?)

使用rest,我将让一个用户在无限循环中“检查其他玩家是否移动”。这是相当CPU密集型的,并且会在服务器上执行更多的请求。另一个问题是,一旦设置了“游戏室”,我可能需要两个用户通过peer2peer进行通信。很好的解释,伙计。你能分享一些链接来了解这件事吗?@Pazvanti-在任何轮询设置中,轮询之间总是需要一定的间隔。你不能在没有等待的情况下把它扔进一个循环。客户端到客户端的通信也可以通过服务器基础结构完成。根据您希望事情的响应程度,您可以适当地调整轮询时间。@Dharmendra-不幸的是,我目前没有任何关于这个想法的来源。我有一个类似的场景(不是Android应用,而是类似的需求),这就是我们最终的架构。其主要思想是尽可能地保持所有层的松散耦合,在事务中保持尽可能少的状态,并对事物进行分层,以便在需要时进行扩展。所有基本的可扩展性原则。@Pazvanti-此外,一旦开始扩展,大量的服务器命中率确实会上升,但缓存层消除了大部分痛苦,因此服务器调用不会影响应用程序的处理。该应用程序只是处理游戏状态的更新,并告诉缓存它已更新。客户端只处理缓存,这将是一个非常快速的操作,因为它已经有了他们所问问题的答案,只需要查找而不是计算。HTTP流的问题,特别是在基于回合的游戏场景中,是服务器必须保持连接状态,在这种情况下,每个游戏2个连接。对于大多数web服务器(不是全部),开放连接占用大量内存,这意味着这种方法无法很好地扩展,因为大部分时间都花在等待用户和浪费资源上。你说得对-HTTP流看起来不可扩展。不过,使用C2DM将是一个非常好的解决方案。我必须研究Smack,看看我能用它做些什么。如果它主要用于即时通讯,那么它可能不是最好的解决方案……不过,它可能比这更强大。谢谢你的建议。这取决于你的比赛。在很多回合制游戏中,在客户端之间发送聊天信息和游戏信息之间没有太大区别。不过我最喜欢的还是C2DM!我从未使用过C2DM,因此我不确定它在实践中的效果如何(具体来说,接收消息的客户端的延迟是多少),但它可能在某些类型的游戏中效果很好。尤其是那些“转折点”可能需要很长时间(几个小时或更长时间,而不是几分钟)的情况