与远程java程序联网

与远程java程序联网,java,network-programming,rmi,bukkit,Java,Network Programming,Rmi,Bukkit,我希望有一个bukkit服务器网络,所有服务器都在一个游戏模式下运行,允许服务器间通信。实现这一点的传统方法是利用MySQL数据库,让所有服务器定期(5秒左右)从数据库中取出,以使所有服务器保持最新。我想知道是否有更好的方法来实现这一点 我有一个想法,但我对网络了解不够,不知道它是否可行。我正在考虑让游戏mod在自己的java服务器下运行(这里称为mod服务器,与bukkit无关)。国防部服务器将拥有与国防部相关的所有数据,并将负责执行与国防部有关的所有计算(处理货币交易、添加和删除主张的土地以

我希望有一个bukkit服务器网络,所有服务器都在一个游戏模式下运行,允许服务器间通信。实现这一点的传统方法是利用MySQL数据库,让所有服务器定期(5秒左右)从数据库中取出,以使所有服务器保持最新。我想知道是否有更好的方法来实现这一点

我有一个想法,但我对网络了解不够,不知道它是否可行。我正在考虑让游戏mod在自己的java服务器下运行(这里称为mod服务器,与bukkit无关)。国防部服务器将拥有与国防部相关的所有数据,并将负责执行与国防部有关的所有计算(处理货币交易、添加和删除主张的土地以及处理税收周期)。所有bukkit服务器在需要确定某个玩家是否可以打破一个区块或伤害另一个玩家时都会与mod server交互。对mod数据的所有更改都在mod服务器上完成。bukkit服务器本质上只是与mod服务器交互的门户。只要mod服务器是单线程的,就不应该存在任何并发问题、竞争条件或冲突


我一直在阅读,我在想,也许这是实现这一目标的途径。mod服务器将被视为RMI服务器,客户端将被视为Bukkit服务器。我通读了这个项目的文档,但我不确定它是否是我想要的。我很难用谷歌搜索它,因为这只是一个我不知道所有技术术语的概念。有什么想法或建议吗?谢谢。

每个bukkit服务器都应该负责管理其上的玩家,并且只管理其上的玩家。因此,当玩家加入特定服务器时,只要加载玩家数据,就不需要这个mod服务器来处理SQL。对播放器的任何更新都可以在本地数据上完成,然后在播放器离开或发生时提交到数据库。例如,or服务器使用zPermissions作为跨服务器权限。它会在更改时更新,更改到其他服务器的玩家拥有原始服务器的所有权限。这里唯一的问题是当组权限发生更改时,只需要重新加载权限来更新,但一旦您的服务器被组织起来,这些权限就不会经常更改。

您使用BungeeCord吗?如果是,您可以创建自己的插件频道。
您可以通过自己的通道从每个子服务器(bukkit服务器)向主服务器(bungeecord代理)发送和接收数据。这里有一个解释:

这是真的,但我的mod需要允许玩家能够跨服务器进行购买。所以它需要一个最新的市场数据实例。如何跨服务器?举个例子会很有帮助。mod服务器怎么可能是单线程的?无论如何,RMI不是单线程的,除非您自己声明所有远程方法
synchronized
或使用
synchronized
阻塞。