爪哇中的多人游戏。最好的解决方案是什么?



我正在用java编写一个多人/多房间游戏(Hearts),使用RMI和一个集中式服务器。但有一个问题:RMI回调将不起作用,因为客户端是Nated和Firewalled。我基本上需要服务器向客户端推送数据更新,可能不使用轮询和套接字(我会在更高级别上进行编码)在您看来,实现这种架构的最佳解决方案是什么?ajax应用程序是唯一的解决方案吗?

你说你不想要轮询,但AJAX正是这样。你可以看看Comet,但无论如何都很难逃脱轮询(例如Comet本身在下面使用轮询)。

您可以使用对等框架,如JXTA。

我可以提出两种主要技术。

  1. 服务器有一个方法getUpdates,可由客户端调用。当要显示更新时,该方法将控件返回给客户端。

  2. 客户端执行注册时,会向服务器提供一个回调远程对象由于这个对象没有在任何rmi注册表中注册,所以natted客户端应该不会有任何问题。

我不确定ajax如何(如果)适用于非基于浏览器的应用程序。您只需在应用程序期间保持自己的SocketConnections池处于打开状态,每个连接都有一个线程。

如果您需要扩展到大量并发连接,那么可以考虑像ApacheMina或Netty这样的非阻塞I/O框架(相关的SO文章:Netty与ApacheMINA)。

最新更新