Project Darkstar

Last updated
Project Darkstar
Original author(s) Sun Microsystems
Initial releaseAugust 30, 2007 (2007-08-30)
Stable release
0.9.11 / October 29, 2009;14 years ago (2009-10-29)
Written in Java
Platform Java
Type MMOG middleware
License GPLv2, BSD
Website http://www.projectdarkstar.com/

Project Darkstar was an open-source MMOG middleware solution written in Java. Project Darkstar began as a personal project of Jeff Kesselman in 1999. It later became a research project at Sun Microsystems, [1] and aimed to "help developers and operators avoid a range of serious, yet typical, problems associated with massive scale online games, virtual worlds, and social networking applications today, including zone overloading, data corruption, and server underutilization." [2] [3]

Contents

History

Project Darkstar began as a personal project of Jeff Kesselman in 1999 while he was the Senior Game Integration Engineer at the Total Entertainment Network. In 2004, Sun's Game Technology Group was formed, and at that time Mr. Kesselman brought the third iteration of the project into Sun where it was dubbed the Sun Game Server. (The SGS moniker survives to this day in the package names of the Project Darkstar Server.)

Mr. Kesselman worked on the third version for a year as a solo project in Sun, debuting an early version at the Game Developers' Conference that year. Following the reorganization of the Software CTO's office in 2005, the project was moved to Sun Labs under Sun Labs Director Karl Haberl. Karl increased the man-power, adding Seth Proctor and Dan Ellard as co-researchers, as well as contractors James Megquier and Sten Anderson. This team delivered what is now known as the Early Access version, the first working server, for GDC 2005.

On February 2, 2010, in the wake of the purchase of Sun by Oracle, Jim Waldo posted on the "Project Announcement" forum that "Sun Labs engineering effort is no longer being applied to Darkstar development". A number of members of the Sun Labs team and a number of members of the Darkstar community worked for a time on the RedDwarf Server as a successor to Darkstar. [4]

Features

Overview of a Project Darkstar network. Pds architecture.png
Overview of a Project Darkstar network.

When a Project Darkstar server implementation is run, it either starts a new network or joins one that is currently running. All networks contain clients, server implementations, a Project Darkstar stack on which the server implementations run, and several meta-service nodes that handle traffic between each node in the server stack. A server implementation is a user created program written with the Project Darkstar API. The clients include all client-side applications and games that are connected to a game server in the network.

Project Darkstar is being developed to support all features vital to a massively multiplayer game, and at the same time be scalable enough to support non-massive multiplayer online games. [5] As such, there are many features that it supports, and many features that are being implemented and integrated into it actively.

The API of Project Darkstar is the key component for developers who use the technology. With it, they can develop game servers to communicate correctly with their client technology and have a server up and running that runs on top of the Project Darkstar game stack. The API is written to hide the concurrency of the underlying system that the Project Darkstar stack performs for the developer, so that the program can be written with the illusion that it is single threaded, even though the stack is fully parallel. The main parts of the API include task management, data persistence, and channel communication. [6]

Control of information in a Project Darkstar server is generally handled by tasks, although in some special cases they are not necessary. They are used in instances where storage or retrieval of data must be protected from a server crash or shutdown, as tasks are saved and remembered when they are run, and can be respawned when the server is restarted in the same state as they were in before the crash. [7] This is useful, for instance, when updating character information. If something goes wrong with the server internally, the character information is persisted and on a server restart the character information will be restored from the last state it was in before the crash.[ citation needed ]

The Berkeley DB used by Project Darkstar stores all data that is to be persisted. Anything that is to be stored in the database must also be serializable, as the database is programmed to store binary information. A managed object can be anything from player data (i.e. position, equipment) to internal server data and control logic (i.e. scalable data structure, tasks). The usefulness of managed objects is seen in the instance of a server failure. Since managed objects are updated transactionally, any corrupted data is discarded on the server restart and the managed object is rolled back to its last working state.[ citation needed ]

Channels give developers an easy way of communicating with many clients. The way channels work is by giving clients a way of subscribing to channels such that they can send messages to the channel and receive messages from the channel. When a message is sent to the channel from a client or the server, the message is multicast to all clients who are subscribed to it. It is an abstraction built on top of the communications layer to assist in the development of easy and extensible communication between many clients and the server.[ citation needed ]

Notable uses

Reception

Some authors have suggested that the management of Central Object Store and Distributed Random Access might not be realistically possible in a highly interactive game environment. [10]

RedDwarf

RedDwarf Server Logo.png

RedDwarf Server was an open-source middleware solution for developing the server-side of massively multiplayer online games. It was the official community fork of Project Darkstar. Once Oracle discontinued support for the project, the community rebranded the latest codebase of Project Darkstar's repositories and released it as RedDwarf Server. [11] RedDwarf inherited the Project Darkstar licensing scheme, with the RedDwarf Server distributed under GPLv2 and the server APIs being made available under the GNU General Public License (GPL) with the classpath exception. The Java and C client APIs—available as part of the RedDwarf project— were distributed under a BSD license. [12]

Clients can communicate with the server using a Java or C API. The community also released client APIs for additional platforms including C#, Python, Objective-C, and ActionScript. [13] RedDwarf Server uses a built-in protocol for network communications. [14]

Related Research Articles

<span class="mw-page-title-main">Java applet</span> Small application written in Java

Java applets were small applications written in the Java programming language, or another programming language that compiles to Java bytecode, and delivered to users in the form of Java bytecode. The user launched the Java applet from a web page, and the applet was then executed within a Java virtual machine (JVM) in a process separate from the web browser itself. A Java applet could appear in a frame of the web page, a new application window, Sun's AppletViewer, or a stand-alone tool for testing applets.

<span class="mw-page-title-main">Java (programming language)</span> Object-oriented programming language

Java is a high-level, class-based, object-oriented programming language that is designed to have as few implementation dependencies as possible. It is a general-purpose programming language intended to let programmers write once, run anywhere (WORA), meaning that compiled Java code can run on all platforms that support Java without the need to recompile. Java applications are typically compiled to bytecode that can run on any Java virtual machine (JVM) regardless of the underlying computer architecture. The syntax of Java is similar to C and C++, but has fewer low-level facilities than either of them. The Java runtime provides dynamic capabilities that are typically not available in traditional compiled languages.

In distributed computing, a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in a different address space, which is written as if it were a normal (local) procedure call, without the programmer explicitly writing the details for the remote interaction. That is, the programmer writes essentially the same code whether the subroutine is local to the executing program, or remote. This is a form of client–server interaction, typically implemented via a request–response message-passing system. In the object-oriented programming paradigm, RPCs are represented by remote method invocation (RMI). The RPC model implies a level of location transparency, namely that calling procedures are largely the same whether they are local or remote, but usually, they are not identical, so local calls can be distinguished from remote calls. Remote calls are usually orders of magnitude slower and less reliable than local calls, so distinguishing them is important.

The Jakarta Messaging API is a Java application programming interface (API) for message-oriented middleware. It provides generic messaging models, able to handle the producer–consumer problem, that can be used to facilitate the sending and receiving of messages between software systems. Jakarta Messaging is a part of Jakarta EE and was originally defined by a specification developed at Sun Microsystems before being guided by the Java Community Process.

<span class="mw-page-title-main">Jakarta EE</span> Set of specifications extending Java SE

Jakarta EE, formerly Java Platform, Enterprise Edition and Java 2 Platform, Enterprise Edition (J2EE), is a set of specifications, extending Java SE with specifications for enterprise features such as distributed computing and web services. Jakarta EE applications are run on reference runtimes, which can be microservices or application servers, which handle transactions, security, scalability, concurrency and management of the components they are deploying.

In computing, the Java Remote Method Invocation is a Java API that performs remote method invocation, the object-oriented equivalent of remote procedure calls (RPC), with support for direct transfer of serialized Java classes and distributed garbage-collection.

<span class="mw-page-title-main">Jakarta Servlet</span> Jakarta EE programming language class

A Jakarta Servlet, formerly Java Servlet is a Java software component that extends the capabilities of a server. Although servlets can respond to many types of requests, they most commonly implement web containers for hosting web applications on web servers and thus qualify as a server-side servlet web API. Such web servlets are the Java counterpart to other dynamic web content technologies such as PHP and ASP.NET.

<span class="mw-page-title-main">WebObjects</span> Java web application server and framework originally developed by NeXT Software

WebObjects was a Java web application server and a server-based web application framework originally developed by NeXT Software, Inc.

In computing, a directory service or name service maps the names of network resources to their respective network addresses. It is a shared information infrastructure for locating, managing, administering and organizing everyday items and network resources, which can include volumes, folders, files, printers, users, groups, devices, telephone numbers and other objects. A directory service is a critical component of a network operating system. A directory server or name server is a server which provides such a service. Each resource on the network is considered an object by the directory server. Information about a particular resource is stored as a collection of attributes associated with that resource or object.

<span class="mw-page-title-main">Java (software platform)</span> Set of computer software and specifications

Java is a set of computer software and specifications that provides a software platform for developing application software and deploying it in a cross-platform computing environment. Java is used in a wide variety of computing platforms from embedded devices and mobile phones to enterprise servers and supercomputers. Java applets, which are less common than standalone Java applications, were commonly run in secure, sandboxed environments to provide many features of native applications through being embedded in HTML pages.

OPC Unified Architecture is a cross-platform, open-source, IEC62541 standard for data exchange from sensors to cloud applications developed by the OPC Foundation. Distinguishing characteristics are:

Thrift is an interface definition language and binary communication protocol used for defining and creating services for numerous programming languages. It was developed at Facebook for "scalable cross-language services development" and as of 2020 is an open source project in the Apache Software Foundation.

<span class="mw-page-title-main">Rackspace Cloud</span> Cloud computing platform

The Rackspace Cloud is a set of cloud computing products and services billed on a utility computing basis from the US-based company Rackspace. Offerings include Cloud Storage, virtual private server, load balancers, databases, backup, and monitoring.

<span class="mw-page-title-main">Db4o</span>

db4o was an embeddable open-source object database for Java and .NET developers. It was developed, commercially licensed and supported by Actian. In October 2014, Actian declined to continue to actively pursue and promote the commercial db4o product offering for new customers.

<span class="mw-page-title-main">Redis</span> Open-source in-memory key–value database

Redis is an open-source in-memory storage, used as a distributed, in-memory key–value database, cache and message broker, with optional durability. Because it holds all data in memory and because of its design, Redis offers low-latency reads and writes, making it particularly suitable for use cases that require a cache. Redis is the most popular NoSQL database, and one of the most popular databases overall. Redis is used in companies like Twitter, Airbnb, Tinder, Yahoo, Adobe, Hulu, Amazon and OpenAi.

<span class="mw-page-title-main">API</span> Software interface between computer programs

An application programming interface (API) is a way for two or more computer programs to communicate with each other. It is a type of software interface, offering a service to other pieces of software. A document or standard that describes how to build or use such a connection or interface is called an API specification. A computer system that meets this standard is said to implement or expose an API. The term API may refer either to the specification or to the implementation. Whereas a system's user interface dictates how its end-users interact with the system in question, its API dictates how to write code that takes advantage of that system's capabilities.

<span class="mw-page-title-main">OpenStack</span> Cloud computing software

OpenStack is a free, open standard cloud computing platform. It is mostly deployed as infrastructure-as-a-service (IaaS) in both public and private clouds where virtual servers and other resources are made available to users. The software platform consists of interrelated components that control diverse, multi-vendor hardware pools of processing, storage, and networking resources throughout a data center. Users manage it either through a web-based dashboard, through command-line tools, or through RESTful web services.

Plastic SCM is a cross-platform commercial distributed version control tool developed by Códice Software Inc. It is available for Microsoft Windows, Mac OS X, Linux, and other operating systems. It includes a command-line tool, native GUIs, diff and merge tool and integration with a number of IDEs. It is a full version control stack not based on Git.

Wakanda is a JavaScript platform to develop and run web or mobile apps.

References

  1. Stephen Shankland (2006). "Sun's Project Darkstar aims for gaming services". CNET. Retrieved 2012-02-27.
  2. Brent Rabowsky; Radiosity Press (8 January 2010). Interactive Entertainment: A Videogame Industry Guide. gameindustrybook. p. 55. ISBN   978-0-9842984-1-9 . Retrieved 27 February 2012.
  3. Tim Blackman (2006). "Scalable Data Storage in Project Darkstar" (PDF). Oracle.com. Retrieved 2012-02-27.[ permanent dead link ]
  4. "RedDwarf Server". 2010-02-17. Archived from the original on 2010-02-17. Retrieved 2020-07-17.
  5. Andrew Davison (30 April 2007). Pro Java 6 3D Game Development: Java 3D, JOGL, JInput and JOAL APIs. Springer. p. 10. ISBN   978-1-59059-817-7 . Retrieved 27 February 2012.
  6. Diomidis Spinellis; Georgios Gousios (22 January 2009). Beautiful architecture. O'Reilly Media, Inc. p. 52. ISBN   978-0-596-51798-4 . Retrieved 27 February 2012.
  7. Vaclav Snasel; Jan Platos; Eyas El-Qawasmeh (20 August 2011). Digital Information Processing and Communications: International Conference, ICDIPC 2011, Ostrava, Czech Republic, July 7–9, 2011. Proceedings. Springer. p. 219. ISBN   978-3-642-22388-4 . Retrieved 27 February 2012.
  8. Joseph Fong; Reggie Kwan; Fu Lee Wang (2008). Hybrid Learning and Education: First International Conference, Ichl 2008 Hong Kong, China, August 13–15, 2008 Proceedings. Springer. p. 57. ISBN   978-3-540-85169-1 . Retrieved 27 February 2012.
  9. Youngkyun Baek (1 April 2010). Gaming for classroom-based learning: digital role playing as a motivator of study. Idea Group Inc (IGI). p. 272. ISBN   978-1-61520-713-8 . Retrieved 27 February 2012.
  10. Hamido Fujita; Imran Zualkernan (15 October 2008). New trends in software methodologies, tools and techniques: proceedings of the seventh SoMeT_08. IOS Press. p. 359. ISBN   978-1-58603-916-5 . Retrieved 27 February 2012.
  11. "Reddwarfserver | Take a Good Book -".
  12. "Reddwarfserver | Take a Good Book -".
  13. "RedDwarf". 23 April 2013.
  14. https://svn.java.net/svn/sgs-server~svn/branches/sgs-server-0.9.10/sgs-server/src/main/resources/com/sun/sgs/impl/kernel/doc-files/config-properties.html