Skip to content
mike edited this page Dec 25, 2017 · 2 revisions

Pinus is an easy to use, fast, scalable, distributed game server framework for Node.js. It provides a core network architecture and a series of tools and libraries that can help developers eliminate boring duplicate work for common underlying logic. The goal of Pinus is to improve development efficiency by eliminating the need to spend time on repetitious network related programming.

While developed originally for games, Pinus is not game specific and could be used for any real-time web application. The scalability and flexibility of Pinus makes it usable as a general-purpose distributed real-time application development framework.

In addition, Pinus supports several major client SDKs, making communication with the game server(s) a breeze to set up for varying platforms, including:

  • Javascript: automatically generated when running the core pinus init setup
  • .Net
  • Android
  • iOS

While several of these are under construction, they can certainly be used for example code. We are also looking for contributors.

Composition of Pinus

  • Framework

The network framework is the core of pinus.

  • Libraries

Pinus provides a lot of libraries. These include game-specific AI, AOI, path-finding, etc. as well as general functionalities like timing task execution, data synchronization, etc.

  • Tools

Pinus provides a lot of tools, including a server management & control tool, command-line tools (pinus list, pinus kill, pinus stop, for example), a stress testing tool, etc.

  • Client SDKs

Pinus provides client SDKs for all major platforms, including JavaScript, C, C#, Android, iOS, and Unity3D. As the communication protocol of pinus is open and customizable, developers can easily customize their own communication protocol, so pinus can be extended to support any client platform.

  • Demo

Pinus offers several demos to help with developer ramp-up:

  • Chat of Pinus: a chat demo that can run on all the major platforms and includes channels, multiple connector servers, etc.
  • Treasures: a simple game demo and a HTML5 client.
  • Lord of Pinus: a full HTML5-based MMO game demo (source code) .

Why Pinus?

Developing a high concurrency real-time game server is a complex task. Up until recently, there were few suitable open source solutions in the field of game server development. Pinus aims to fill that need by providing:

  • High Scalability

Pinus introduces a single-threaded multiprocess architecture. Each server is its own node-based process. It is easy to add or remove servers to an existing cluster by modifying the configuration file, without requiring any changes to the source code of the application.

  • Easy to Use

Pinus is based on Node.js and was developed similar to a web application (think Express). Similar to Ruby on Rails, Pinus follows the "convention over configuration" principle and requires virtually no configuration out of the box to get a basic application running.

  • Loosely Coupled and Highly Extensible

Following the micro module principle of Node.js, Pinus itself has a small core. All the components, libraries, and tools are provided as loosely coupled NPM modules that extend the core framework. We encourage third parties to develop their own Pinus extension modules.

  • Documentation

All major functionality is documented here in this Wiki. We welcome any suggestions or questions so we can improve your experience with the framework.

  • Complete MMO Demo

Pinus includes a complete open source MMO game demo called [Lord of Pinus] (http://pinus.netease.com/lordofpinus/ "Lord of pinus online") (Source Code), which consists of more than 10k lines of JavaScript.

Pinus Purpose

Pinus was designed for server-side applications like real-time games, social games, mobile games, etc of all sizes.

Pinus is not recommended for use when developing large-scale MMORPG game servers, especially large-scale 3D games. For applications like that, the commercial engine such as Bigworld may be a better choice.

Well, let's Install pinus and try it .

Clone this wiki locally