我正在使用RMI和集中式服务器在java中编写多人/多房间游戏(Hearts)。 但是有一个问题:RMI Callbacks不会起作用,因为客户端是Natted和Firewalled。我基本上需要服务器将数据更新推送到客户端,可能不使用轮询和不使用套接字(我会在更高级别编码) 在您看来,实现这种架构的最佳解决方案是什么? ajax应用程序是唯一的解决方案吗?
答案 0 :(得分:3)
你说你不想要轮询,但AJAX就是这样。您可以查看Comet,但无论如何都很难逃脱轮询(例如Comet本身使用下面的轮询)。
答案 1 :(得分:1)
您可以使用对等框架,例如JXTA。
答案 2 :(得分:0)
我可以提出两种主要技巧。
服务器有一个方法getUpdates,可由客户端调用。当有要显示的更新时,该方法将控件返回给客户端。
当客户端执行注册时,它们会为服务器提供回调远程对象 由于此对象未在任何rmi注册表中注册,因此对于natted客户端不应存在任何问题。
答案 3 :(得分:0)
我不确定(如果)ajax如何适用于非基于浏览器的应用程序。您可以使用每个连接的线程在应用程序期间维护您自己的SocketConnections池。
如果您需要扩展到大量并发连接,请查看非阻塞I / O框架,例如Apache Mina或Netty(相关SO帖子:Netty vs Apache MINA)。< / p>