We are still finalizing the business model,. A part of what we did at GDC was talk to a *lot* of developers about what kidn of mdoel they would like to see.

We are leaning at the moment towards two models. A licensing/engineering contract model for very very big sho[ps that want to own their own infra-structure and a service-model for little develoeprs that dont want to have to build and run machine rooms.

I am erpsonally *very* committed to having a model that makes it acessible to very very small developers. Part of my goal with this project (and a goal to which Sun in general has bought into and agreed with) is to make massively multiplayer online game development really acessible to small developers with limited resources.

Got a question about Java and game programming? Just new to the Java Game Development Community? Try my FAQ. Its likely you'll learn something!

Yes cas, I agree. We hoped to have it a bit more done but SDK fires kept the team busy up to right before the show and ew felt making the SDK solid was mroe important then finishign the demo. BattleTrools (and the bigger JNWN project from which it derives) is our team's own project and were all eager to get a chance to complete it

Got a question about Java and game programming? Just new to the Java Game Development Community? Try my FAQ. Its likely you'll learn something!

It is rather embarrassing that Stomping Grounds is a Windows executable running on DirectX though, isn't it.... another snafu...

If it uses the SGS from C++ that's just another plus for SGS, isn't it? It's all about perspective... they need such a title to attract the ignorant C/C++ devs that would otherwise dismiss it because it was "that slow Java stuff that nobody uses for games".

The real embarrassment is that after using Windows and downloading the Stomping Grounds demo from their site, I STILL can't play because the idiot thing won't launch if you have a debugger running... Sorry, I'm not rebooting just to play your game.

Hrm. That might be their DRM trying to make sure you dont hack the free-use timer....

Got a question about Java and game programming? Just new to the Java Game Development Community? Try my FAQ. Its likely you'll learn something!

i found the time for playing around with the darkstar early access release this weekend, now i have some questions .

1. How can you define third party libraries your app needs? In the deploy.xml i found no parameter or such thing, to make the sgs load the libraries. I tried adding the library to the classpathURL attribute separated with ";", added the library to the server's lib directory, or added it to the classpath when starting the server, nothing worked.

2. Is it possible to schedule events with a finer accuracy than 1 second using the PDTimer?

3. In the final product, will there be a possibility to acquire some of the game objects directly out of the object store from an application which runs not in the game server? For example some web application which shows the players online status.

I really like the sgs, looks like the software i was all the times looking for

i found the time for playing around with the darkstar early access release this weekend, now i have some questions .

1. How can you define third party libraries your app needs? In the deploy.xml i found no parameter or such thing, to make the sgs load the libraries. I tried adding the library to the classpathURL attribute separated with ";", added the library to the server's lib directory, or added it to the classpath when starting the server, nothing worked.

YUp. Thats a known issue. I consider it a bug we need to fix. In the meanwhile you have to either build it into your app Jar or put it on the classpath of the SGS sorry. just one of those little details that didnt get ironed out in time.

Hopefully within the next few releases you'll be able to put a multi-jar path in for your app.

Quote

2. Is it possible to schedule events with a finer accuracy than 1 second using the PDTimer?

The PDTimer ultimately depends on the system heartbeat timer which has ms resolution (but not necc accuracy as it depends on System.currentTimeMillis currently.). Although the 1 sec resoluition is hardwired inthe PDTImer code, that code shoudl be in the SDK as source and you can modify it, recompile it, and include it with your app. Keep in mind that the higher you set that reolksution the mreo load the timer will potentially put on the system.

Its a good "ToDo" point to modify the default version to use a property to set that resolution. I'll put it "on the list."

Quote

3. In the final product, will there be a possibility to acquire some of the game objects directly out of the object store from an application which runs not in the game server? For example some web application which shows the players online status.

We've talked a fair bit about internally an external "DataBase" access for tools, web apps, etc. Hearing otehrs ask us for it helsp push it up in the priority list.

Quote

I really like the sgs, looks like the software i was all the times looking for

Christoph

Thanks, its what *I* wanted when Iw as workign on Dark Sun Online II, way back when. Obviously this is early stage and the entire team REALLYappreciates hearing the feedback about what featrues you need added/changed.

JK

Got a question about Java and game programming? Just new to the Java Game Development Community? Try my FAQ. Its likely you'll learn something!

I've only got as far as reading the javadoc and the client/server api docs, not looked at the tutorial code yet.

My game will mostly be talking to the server to update GLOs from what I can see. I can't see a why for the client to recieve data that is *not* on a channel, even though there is a way to send data direct. Am I missing something or is this what was planned.

I'm planning on having multiple areas that are totally unconnected geographially. In my old system I was planning on being able to host these on different servers, maybe even in different parts of the real world. I was planning on being able to offload sectors from heavily loaded machines to not so heavily loaded ones. The sectors themselves have no dynamic state. Objects within them do, but the sectors themselves don't, so AI etc can still be offloaded. Under SGS this isn't the case, and I am concerned that whilst I gain failover, I end up with so much replication type traffic that I can only run servers within the same lan, and that it doesn't scale.

Again, i've probably missed something, but I like to know up front what things I need to think about with designing/coding

I've only got as far as reading the javadoc and the client/server api docs, not looked at the tutorial code yet.

My game will mostly be talking to the server to update GLOs from what I can see. I can't see a why for the client to recieve data that is *not* on a channel, even though there is a way to send data direct. Am I missing something or is this what was planned.

Originally, we assumed all data sent to clients was channeled.

We've since reconsidered this design decision and will probably implement a non-channeled data send in a future version but for now, yes, this is the case. Most current apps open up a well known "control channel" at the start and use it to listen for data from the server.

Quote

I'm planning on having multiple areas that are totally unconnected geographially. In my old system I was planning on being able to host these on different servers, maybe even in different parts of the real world. I was planning on being able to offload sectors from heavily loaded machines to not so heavily loaded ones. The sectors themselves have no dynamic state. Objects within them do, but the sectors themselves don't, so AI etc can still be offloaded. Under SGS this isn't the case, and I am concerned that whilst I gain failover, I end up with so much replication type traffic that I can only run servers within the same lan, and that it doesn't scale.

Well, we balance the load but do so differently. Rather then assignign data to machines, we assign users to machines and let the data flow to them as needed. The result actually is much better load balancing as we can always be using all processors.

They objects arent duplicated but rather shuffled between servers through the ObjectStore which all the servers share.

You migth still want to segregate communication by region in order to avoid n-sqaured communication load. Thats done by opening a different channel for each region. (or, if you want to get fancier, you can actually do it with a dynamic quad-tree with channels at the nodes. In some games that arent physical simualtion, you might use other paradigms to divide up the traffic in channels, like millitary organization of units.)

JK

Got a question about Java and game programming? Just new to the Java Game Development Community? Try my FAQ. Its likely you'll learn something!

The control channel is ok untill someone grabs the library and starts sending multicasts down the channel. As I understand it SGS will then route that on to the selected clients without my game logic seing it. At least if my server sees it first, worst case is I can log it, best case I can block it. Stops a potential attack against the clients that is routed through the server.

The clients can send data to the server direct, but I guess I have to send the data to the clients on a channel. It's a shame I can't make them read only to clients so that no client can use it to send data on .

The sectors are going to be GLOs, but that means that 2 users connected to 2 different hosts will force the hosts to share the data, at runtime between them.

My plan was that a users state would be saved when they docked at some object, or warped in, effectivly removing them from the game area into a lobby area. If the server fell over they got reverted to the last saved location/stats/inventory etc. This isn't ideal and I like the idea of if one server fails, another takes over. You are also correct that the load balancing is handled much better. Does this mean that every task that modifies a GLO results in a DB write?

how much impact will it have wenn server sync over a not so good line.

Like a server in amsterdam with one in singapore resp new york? or with multiply servers are the servers aware about the "cost" of the connection wenn assigning users to a server? Having a server A,B,C what if a server isn't down but the connection between server A and B is for what ever reason not optimal. will it (re)assign the users to B C or if C is also connected to A (in a cirkel) mostly on C.. hmm perhaps a poor example.

The control channel is ok untill someone grabs the library and starts sending multicasts down the channel. As I understand it SGS will then route that on to the selected clients without my game logic seing it. At least if my server sees it first, worst case is I can log it, best case I can block it. Stops a potential attack against the clients that is routed through the server.

Well, they need to get through validation before they can send anything.

If they can break through your validation and actually log on, well, then I agree there is an issue 'cause they can flood the other clients or even flood the server.

One possible route for breaking into the systenm woudl be by inetrcepting and spoofing packets. The nice thing about the pluggable transport layer though is that it letys you implement any kind of packet encryption or validation you want. We have a few experiments we want to try in that space, such as an SSL wrapper around the UserManager/UserManagerClient. We have rouetrs at Sun that will do the SSL on the server side for us.. the big unknown is how much it will cost in terms of client CPU...

Quote

The clients can send data to the server direct, but I guess I have to send the data to the clients on a channel. It's a shame I can't make them read only to clients so that no client can use it to send data on .

Well you could open a channel per client, but Im not sure I entirely see the difference. The system makes it impossible for a client to spoof the server-- every packetarrives with a "from" ID and the server has an id which is uillgeal for clients. In fact, clients cant even spoof each other beause the ID is assigned on packet arrival on the server side depending on the connection the packet was receieved from...

Quote

The sectors are going to be GLOs, but that means that 2 users connected to 2 different hosts will force the hosts to share the data, at runtime between them.

Yes but the system is *designed* to do that. Its rather the point of our putting so much effort into making the ObejctStore blindingly fast and highly scalable. Objects float between slices. Dont worry, be happy, we deal with it.

Quote

.My plan was that a users state would be saved when they docked at some object, or warped in, effectivly removing them from the game area into a lobby area.

Again, your working too hard! we do that for you. Every task is a durable atomic transaction. So state is being constantly saved. (Now I dont gaurantee 100% durability in the case of a power failure... only durability up to the last few seconds and that what IS saved is referntially integrous. This allows me to decouple the very very fast in-memory operations from the long term disc storage.)

Quote

If the server fell over they got reverted to the last saved location/stats/inventory etc. This isn't ideal and I like the idea of if one server fails, another takes over. You are also correct that the load balancing is handled much better. Does this mean that every task that modifies a GLO results in a DB write?

Yup. Every task is a transaction and all object changes are comitted when the trasnaction completes.

As I say, this is why we worked so hard on and worry so much abou the ObjectStore. Its really the magic that makes the whole rest of the system possible!

Btw, the SDK object store is a compromise so you can run on a single system. Its an ini-memory database backing up to derby. Derbyis actually not terrbily fast at writing BLOBs so we have found that, if you really ebat on the server hard, you can get a fairly large "waiting" queue to build up for derby to process. We might replace derby in the SDK at soem point if I found a more performant pure-java database...

Got a question about Java and game programming? Just new to the Java Game Development Community? Try my FAQ. Its likely you'll learn something!

how much impact will it have wenn server sync over a not so good line.

At the moment we arent supporting a hot-geographical distribution system. All the servers for a given SGS abck-end live in the samemachine room or ones that are very close (leased lines within the same city.) This simplifies a numebr of issues.

A common misunderstanding is that sharding today is about physical location. It isnt. Its really about load balancing. I play city of heroes with a friend in Japan, some in NYC and a few in England all the time-- and the server is here on the west coast of the US,

We can do hot snapshot backups without bringing the system down. Our thought is that is sufficient for diasaster recovery. Yo utake a snapshot once or twice a day and take it offsite. if you really need a backup site somewhere else in the country or world then you send the snapshots to them.

Got a question about Java and game programming? Just new to the Java Game Development Community? Try my FAQ. Its likely you'll learn something!

At the moment we arent supporting a hot-geographical distribution system. All the servers for a given SGS abck-end live in the samemachine room or ones that are very close (leased lines within the same city.) This simplifies a numebr of issues.

very sensable esp at this point.

Quote

A common misunderstanding is that sharding today is about physical location. It isnt. Its really about load balancing. I play city of heroes with a friend in Japan, some in NYC and a few in England all the time-- and the server is here on the west coast of the US,

We can do hot snapshot backups without bringing the system down. Our thought is that is sufficient for diasaster recovery. Yo utake a snapshot once or twice a day and take it offsite. if you really need a backup site somewhere else in the country or world then you send the snapshots to them.

java-gaming.org is not responsible for the content posted by its members, including references to external websites,
and other references that may or may not have a relation with our primarily
gaming and game production oriented community.
inquiries and complaints can be sent via email to the info‑account of the
company managing the website of java‑gaming.org