lonng
nano
Go

Lightweight, facility, high performance golang based game server framework

Last updated Jul 6, 2026
3.2k
Stars
464
Forks
31
Issues
+4
Stars/day
Attention Score
82
Language breakdown
Go 99.0%
Shell 0.7%
Makefile 0.2%
Batchfile 0.1%
Files click to expand
README

Nano [![Build Status][1]][2] [![GoDoc][3]][4] [![Go Report Card][5]][6] [![MIT licensed][7]][8]

[1]: https://github.com/lonng/nano/actions/workflows/go.yml/badge.svg?branch=master [2]: https://github.com/lonng/nano/actions/workflows/go.yml [3]: https://godoc.org/github.com/lonng/nano?status.svg [4]: https://godoc.org/github.com/lonng/nano [5]: https://goreportcard.com/badge/github.com/lonng/nano [6]: https://goreportcard.com/report/github.com/lonng/nano [7]: https://img.shields.io/badge/license-MIT-blue.svg [8]: LICENSE

Nano is an easy to use, fast, lightweight game server networking library for Go. 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 nano is to improve development efficiency by eliminating the need to spend time on repetitious network related programming.

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

Join to Discord: Nano Community

How to build a system with Nano

What does a Nano application look like?

The simplest "nano" application as shown in the following figure, you can make powerful applications by combining different components.

Application

In fact, the nano application is a collection of  Component , and a component is a bundle of  Handler, once you register a component to nano, nano will register all methods that can be converted to Handler to nano service container. Service was accessed by Component.Handler, and the handler will be called while client request. The handler will receive two parameters while handling a message: - *session.Session: corresponding a client that apply this request or notify. - *protocol.FooBar: the payload of the request.

While you had processed your logic, you can response or push message to the client by session.Response(payload) and session.Push('eventName', payload), or returns error when some unexpected data received.

How to build distributed system with Nano

Nano contains built-in distributed system solution, and make you creating a distributed game server easily.

See: The distributed chat demo

The Nano will remain simple, but you can perform any operations in the component and get the desired goals. You can startup a group of Nano application as agent to dispatch message to backend servers.

How to execute the asynchronous task

func (manager PlayerManager) Login(s session.Session, msg *ReqPlayerLogin) error {
    var onDBResult = func(player *Player) {
        manager.players = append(manager.players, player)
        s.Push("PlayerSystem.LoginSuccess", &ResPlayerLogin)
    }
    
    // run slow task in new gorontine
    go func() {
        player, err := db.QueryPlayer(msg.PlayerId) // ignore error in demo
        // handle result in main logical gorontine
        nano.Invoke(func(){ onDBResult(player) })
    }
    return nil
}

Documents

  • English
+ How to build your first nano application + Route compression + Communication protocol + Design patterns + API Reference(Server) + How to integrate Lua into Nano component(incomplete)
  • 简体中文
+ 如何构建你的第一个nano应用 + 路由压缩 + 通信协议 + API参考(服务器) + 如何将lua脚本集成到nano组件中(未完成)

Resources

  • Javascript
+ nano-websocket-client + nano-egret-client
  • Typescript/cocos-creator
+ nano-client-ts
  • Demo
+ Implement a chat room in 100 lines with nano and WebSocket + Tadpole demo + 四川麻将, 血战到底(三人模式/四人模式)完整项目实例

Community

  • QQGroup: 289680347 Q群已满员(加微信 gsw_945 邀请进微信群, 需备注 nano加群)
  • Reddit: nanolabs

Successful cases

Go version

> go1.8

Installation

go get github.com/lonng/nano

dependencies

go get -u github.com/pingcap/check go get -u github.com/pingcap/errors go get -u github.com/urfave/cli

go get -u google.golang.org/protobuf/proto go get -u github.com/gorilla/websocket go get -u google.golang.org/grpc

Protocol Buffers

# protoc

download form: https://github.com/protocolbuffers/protobuf/releases

protoc-gen-go

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

delve

go install github.com/go-delve/delve/cmd/dlv@latest

Test

go test -v ./...

Benchmark

# Case:   PingPong

OS: Windows 10

Device: i5-6500 3.2GHz 4 Core/1000-Concurrent   => IOPS 11W(Average)

Other: ...

cd ./benchmark/io go test -v -tags "benchmark"

License

MIT License

🔗 More in this category

© 2026 GitRepoTrend · lonng/nano · Updated daily from GitHub