Scalable Distributed Game Server Engine with Hot Swapping in Golang
Go Python Other
Switch branches/tags
Nothing to show
Latest commit b78056a Aug 16, 2017 LinNan use glide to manage packages

README.md

GoWorld GoDoc Build Status Go Report Card ApacheLicense

Scalable Distributed Game Server Engine with Hot Reload in Golang


中文资料: 游戏服务器介绍 目录结构说明 使用GoWorld轻松实现分布式聊天服务器 欢迎加入Go服务端开发交流群:662182346


Features

  • Spaces & Entities: manage multiple spaces and entities with AOI support
  • Distributed: increase server capacity by using more machines
  • Hot-Swappable: update game logic by restarting server process

Architecture

GoWorld Architecture

Introduction

GoWorld server adopts an entity framework, in which entities represent all players, monsters, NPCs. Entities in the same space can visit each other directly by calling methods or access attributes. Entities in different spaces can call each over using RPC.

A GoWorld server consists of one dispatcher, one or more games and one or more gates. The gates are responsable for handling client connections and receive/send packets from/to clients. The games manages all entities and runs all game logic. The dispatcher is responsable for redirecting packets among games and between games and gates.

The game processes are hot-swappable. We can swap a game by sending SIGUSR1 to the process and restart the process with -restore parameter to bring game back to work but with the latest executive image. This feature enables updating server-side logic or fixing server bugs transparently without significant interference of online players.

Get GoWorld

$ go get github.com/xiaonanln/goworld

Install dependencies

Windows:

  1. get glide.exe from https://github.com/Masterminds/glide/releases and put it to $GOPATH/bin
  2. run install-deps-win.bat

Linux: make install-deps

GoWorld uses Glide to manage packages. Glide

Manage GoWorld using goworld.py

goworld.py is a script for managing goworld server easily. Running goworld.py requires python 2.7.x and psutil module. We can use goworld.py to build, start, stop and reload game servers.

$ pip install psutil

Build Dispatcher & Gate:

$ python goworld.py build dispatcher gate

Build Example Chatroom Server:

$ python goworld.py build examples/chatroom_demo

Start Example Chatroom Server: (dispatcher -> game -> gate)

$ python goworld.py start examples/chatroom_demo

Stop Game Server (gate -> game -> dispatcher):

$ python goworld.py stop

Reload Game Servers:

$ python goworld.py reload

Reload will reboot game processes with the current executive while presearving all game server states.

Run Example Chatroom Client

The client for chatroom demo is hosted at github.com/xiaonanln/goworld-chatroom-demo-client. The project was created and built in Cocos Creater 1.5. A running server & client demo can also be found at http://goworldgs.com/chatclient/.