Fab.io
Fab.io is a lightweight real-time game backend framework written in Go (Golang).
- MVC Pattern
- Synchronized Loop Based Actor Model
- Powered by socket.io
Table of Contents
Getting Started
Prerequisites
To install Fab.io package, you will need to:
- Have Go installed. Head over to Go's download page here to install it.
- Setup your Go workspace.
Installation
- Install Fab.io
$ go get -u github.com/kooinam/fab.io - 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:
- Create an empty directory. In this example we shall use
fabio-chat-demo:$ mkdir fabio-chat-demo $ cd fabio-chat-demo - Create an empty directory
demoinsidefabio-chat-demoto hold our Javascript application codes.$ mkdir demo - Create an HTML file
chat.htmlin thedemofolder and copy the snippet content over intochat.html.
Setting up backend services:
Now, let's proceed to setup our backend services.
- Use the
go modcommand to manage our package dependencies. Let's go ahead and initialize our package dependencies:$ go mod init fabio-chat-demo - Install Fab.io.
$ go get -u github.com/kooinam/fab.io - Create an empty directory
controllersinsidefabio-chat-demoto hold our controllers. A controller is responsible for handling any request and producing the appropriate output. Every controller should implement two functionsRegisterBeforeHooksandRegisterActions.$ mkdir controllers - Create an go file
chat_controller.goincontrollersfolder. Put the following snippet content intochat_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,
})
}
5. Lastly, create `main.go` in root directory and put the following snippet content into `main.go`.
```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!
- Start our application by running:
go run main.go - Navigate to
http://localhost:8000/demo/chat.htmlon your browser to see your chatroom application in action!
Interested on other use cases?
Expore more example use cases by reading our Wiki!
Resources
- Wiki
- https://github.com/kooinam/fabio-chat-demo - An simple chatroom demo with demonstrations of using routings and controllers.
- https://github.com/kooinam/fabio-demo - An simple tic-tac-toe demo with demonstrations of an MVC pattern architecture.
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.