[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Well...
Jan Ekholm <chakie@infa.abo.fi> writes:
> The way it looks now I think I have to abandon the 'Zombie' project. I see
> no use for it anymore and I definitely have seen no public interest
> whatsoever,
I've been meaning to send some feedback for a while. You have something
working, which is more than most of the other network libraries I've seen.
Here is a list of suggestions based on my cursory examination of the Zombie
docs and APIs:
* The Web page and documentation look very good, which is a very good
inducement to developers -- they want to know a library is supported.
* You need to actively port to a wider range of platforms, as there are
very few Linux-specific game projects -- people want to keep their
options open. WinSock would be an obvious next step, and then BeOS and
the Mac.
* There are too many public classes and files to wade through. If a
novice had to choose between BSD Sockets and Zombie, it'd be simpler
to learn sockets.
* I think Zombie tries to do too much -- it's both a low-level API that
wraps BSD Sockets and POSIX, and a high-level API that does a bit of
administrative work (like teams and names) but nothing useful. Pick one
or the other, or architect it so that each layer is clearly distinct.
* You use C++, which means the low-level stuff should be easy to abstract
and port to another platform.
* You provide a few high-level services, but punt on the major issues like
synchronized timers or tracking client latency/bandwidth.
* Alot of the APIs and documentation uses BSD Sockets terminology, which a
developer who chooses Zombie may not be familiar with.
> [...] but apparently everyone wants to do networking 'their own'
> way. Well, that's the way it goes...
Because I've yet to find a network session library that meets my needs (and
satisfies my technical side), I wrote my own:
* Mundane utilities, like memory allocation, threads, and queues are
abstracted into a specific utility library
* The low level network API abstracts the platform networking (sockets,
OpenTransport, etc). It only worries about endpoints, addresses, and
producing/consuming queues of data.
* The high level session API tracks hosts in the session, exchanges data
between given hosts by ID (not address), tracks latency statistics, and
performs any other administrative tasks (name+logo, synchronized clock).
* Messages are either fast status updates (current position, orientiation,
pressed keys) and reliable state changes (changes to the world, captured
resources, new objects) -- not specifically tied to TCP or UDP.
* The application is responsible for maintaining the simulation on top of
the high-level API, sending status updates or state changes as necessary
to keep the world operating.
* The high level API is in C and only has about 20 calls.
* The library runs on MacOS, Windows, and UNIX.
Once you differentiate between low-level networking, high-level networking,
and the simulation itself, you can focus your documentation on the *really*
important design issues, like compensating for latency.
Matt
(Before you ask, my network session library is not open source. We're using
it to develop several upcoming games in-house.)
/* Matt Slot, Bitwise Operator * One box, two box, yellow box, blue box. *
* <fprefect@ambrosiasw.com> * <http://www.ambrosiasw.com/~fprefect/> */