Home
Softono

Fabio

Open source MIT Go
24
Stars
4
Forks
0
Issues
2
Watchers
5 years
Last Commit

 About Fabio

Fab.io is a lightweight game backend framework written in Go (Golang).

Platforms

Web Self-hosted Docker

Languages

Go

Need Help Installing Fabio?

We provide expert installation service for this software. Our team will install, configure, and secure Fabio on your server. plans start at just $30.

Contributors Forks Stargazers Issues MIT License

Fab.io

Fab.io is a lightweight real-time game backend framework written in Go (Golang).

Table of Contents

Getting Started

Prerequisites

To install Fab.io package, you will need to:

  1. Have Go installed. Head over to Go's download page here to install it.
  2. Setup your Go workspace.

Installation

  1. Install Fab.io
$ go get -u github.com/kooinam/fab.io
  1. Import it in your code:
import (
	fab "github.com/kooinam/fab.io"
)

Usage

Example - (Simple JavaScript Chatroom App):

In our first example, we start by creating an simple JavaScript chatroom application which will be connecting to backend services using Fab.io.

Setting up your workspace:

  1. Create an empty directory. In this example we shall use fabio-chat-demo:
$ mkdir fabio-chat-demo
$ cd fabio-chat-demo
  1. Create an empty directory demo inside fabio-chat-demo to hold our Javascript application codes.
$ mkdir demo
  1. Create an HTML file chat.html in the demo folder and copy the snippet content over into chat.html.

Setting up backend services:

Now, let's proceed to setup our backend services.

  1. Use the go mod command to manage our package dependencies. Let's go ahead and initialize our package dependencies:
$ go mod init fabio-chat-demo
  1. Install Fab.io.
$ go get -u github.com/kooinam/fab.io
  1. Create an empty directory controllers inside fabio-chat-demo to hold our controllers. A controller is responsible for handling any request and producing the appropriate output. Every controller should implement two functions RegisterBeforeHooks and RegisterActions.
$ mkdir controllers
  1. Create an go file chat_controller.go in controllers folder. Put the following snippet content into chat_controller.go.
package controllers

import (
	fab "github.com/kooinam/fab.io"
	"github.com/kooinam/fab.io/controllers"
	"github.com/kooinam/fab.io/helpers"
)

// ChatController used for chat purposes
type ChatController struct {
}

// RegisterHooksAndActions used to register hooks and actions
func (controller *ChatController) RegisterHooksAndActions(hooksHandler *controllers.HooksHandler, actionsHandler *controllers.ActionsHandler) {
	actionsHandler.RegisterAction("Join", controller.join)
	actionsHandler.RegisterAction("Message", controller.message)
}

// join used for player to join a room
func (controller *ChatController) join(context *controllers.Context) {
	roomID := context.ParamsStr("roomID")

	// leave all previously joined rooms, and join new room
	context.SingleJoin(roomID)
}

// message used for player to send message message to room
func (controller *ChatController) message(context *controllers.Context) {
	roomID := context.ParamsStr("roomID")
	message := context.ParamsStr("message")

	// broadcast message to room
	fab.ControllerManager().BroadcastEvent("chat", roomID, "Message", nil, helpers.H{
		"message": message,
	})
}
  1. Lastly, create main.go in root directory and put the following snippet content into main.go.
package main

import (
	"fabio-chat-demo/controllers"
	"net/http"

	fab "github.com/kooinam/fab.io"
)

func main() {
	fab.Setup()

	fab.ControllerManager().RegisterController("chat", &controllers.ChatController{})

	fab.ControllerManager().Serve("8000", func() {
		fs := http.FileServer(http.Dir("./demo"))
		http.Handle("/demo/", http.StripPrefix("/demo/", fs))
	})
}

You are done!

Congrats! Now all that's left to do is run the app!

  1. Start our application by running:
go run main.go
  1. Navigate to http://localhost:8000/demo/chat.html on your browser to see your chatroom application in action!

Interested on other use cases?

Expore more example use cases by reading our Wiki!

Resources

Dependencies

Package Link
go-socket.io github.com/googollee/go-socket.io

Roadmap

Some of our upcoming key feature(s)/improvement(s) include:

  • Write MORE Tests
  • Tutorials and Documentations
  • Containerize Solutions
  • Distributed Solutions
  • Graceful Shutdown
  • Actor Model

License

Distributed under the MIT License.