在 Netbeans 6.5 中运行和调试基于 Darkstar 的服务器程序

Web game 一直以来被大家认为是开发技术门槛低,推广容易的一种游戏形式。但是在我1年来开发 web game 积累下来的经验来看,没有服务器端的 web game 只能被当作玩具,而不是一个可以运营的游戏(当然关于 Web game 技术考量关于这个话题,是我可能要写的另外一篇文章了)。为了这个目的,最近特意研究了一下 Darkstar。

Darkstar 是 SUN 公司支持的一个开源的多人在线游戏(MMO)架构,它提供了任务、数据、信道以及会话管理等一系列的功能。使得开发人员可以更加专注的设计开发游戏相关逻辑,而不是服务器基本功能设计或负载调优等等重复的体力活。关于 Darkstar 的详细介绍,可能要写 N 篇文章来说明。先有个大概了解就好了。

基于 Darkstar 开发服务器端的时候,不需要自己写主类。只要按照 Darkstar 提供的标准实现如 AppListener 等等的接口,就可以将开发人员实现的相关功能加入 Darkstar 架构中执行。Darkstar 分别在 *nix 系统和 windows 系统提供了 sgs.sh 和 sgs.bat 两个脚本,以方便使用。

Netbeans 6.5 的发布,给沉闷的开发带来了一丝生气。即使是我那 512M 内存的运行 xubuntu 的笔记本,跑起 Netbeans 也如行云流水般流畅(Eclipse 的粉丝别砸我,Eclipse 我开都不敢开)。我一般是使用 Netbeans 编写 java 代码,上网找了一下,netbeans 的一个 Darkstar 插件已经有一些时候没有更新了。这使得在 Netbeans 中开发 Darkstar 很不方便,不能直接运行,也不能调试。在研究了 sgs.sh 和 sgs.bat 之后发现,这两个脚本实际上只是设置了 java 命令的一些参数,使得 Darkstar 可以执行。那么将这些参数移入 Netbeans 就可以在其中直接运行和调试了(这篇帖子验证了这个想法)。

首先添加库的时候,除了设置类路径和 javadoc 外,还应将 sgs-server-0.9.7-sources.jar 设置到源中去,方便开发和调试。

然后在“项目属性”中找到“运行”,按照下表填写:

主类:com.sun.sgs.impl.kernel.Kernel

参数:foobar.properties

工作目录:F:\java\FoobarServer\data

VM 选项:-Djava.library.path=F:\java\libs\sgs\sgs-server-0.9.7\lib\bdb\win32-x86

其中主类是在项目导入的 sgs-server.jar 中的类。在任何环境下都只可以填写这个 Kernel 类。

参数是项目的配置文件,这个文件一般有下面的内容:

com.sun.sgs.app.name=HelloFoobar
com.sun.sgs.app.root=F:/java/FoobarServer/data/
com.sun.sgs.app.port=1139
com.sun.sgs.app.listener=com.xxiyy.game.server.FoobarServer

name 是项目名称。root 是项目根目录,跟目录必须含有子目录 dsdb,用来存储序列会对象数据。port 是服务器监听的端口。listener 即是实现 AppListener 接口的用户类了。需要注意的是,如果不是用绝对路径,properties 文件是相对于工作目录来说的。

工作目录需要对应 properties 文件中的 root 选项。一定要注意,工作目录必须含有子目录 dsdb。否则运行的时候会提示无法找到路径的错误。

VM 选项是因为 Darkstar 默认使用了Berkeley db,需要加载动态库文件。对于windows 就是 bdb 所带 win32-x86 目录中的 libdb_java45.dll。对于 32 位 linux 就是 linux-x86 目录中的 libdb-4.5.so 和 libdb_java-4.5.so。其他不同系统类推。如果你在运行后出现 java.lang.UnsatisfiedLinkError: no libdb_java45 in java.library.path 这样的异常,说明你的 java.library.path 没有设置正确。

确定后,就可以像普通 java 程序那样在 netbeans 中直接运行或调试 Darkstar 程序了。

Join the Conversation

3 Comments

  1. BDB? 汗..

    可以用其他的DB吗? 例如mysql或者oracle之类的

    MMO game用BDB是不是显得有点不大适合……

    BDB用来作为局部的缓存式数据存放还行..整体用BDB..不太适合MMO GAME这种复杂业务逻辑的吧..

  2. 哈哈,路神的问题的确精辟。前面说了 Darkstar 是一个架构,不是MMO框架,所以涉及业务逻辑的游戏数据并不由 Darkstar 处理。BDB 在 Darkstar 中也仅仅是存储一些持久化对象。这些对象在 server restarting 的时候被 Darkstar 加载。

Leave a comment

Your email address will not be published. Required fields are marked *