repositorypackage
0.0.0-20220914082047-a976d8a63d5e
Repository: https://github.com/hzget/tcpserver.git
Documentation: pkg.go.dev
# README
tcpserver
A tcpserver framework for users to dev backend services. Applications that currently use this framework: mmo game, ...
how to use it
It can be used to register handlers for different client request, add hook funcs on the event that the conn is on/off, and so on. An example to use it:
func main() {
s := tcpserver.NewServer()
// register handlers for different msg from the client
s.AddRouter(core.MSG_C_Talk, &core.ChatRouter{})
s.AddRouter(core.MSG_C_Move, &core.MoveRouter{})
// hook func when the player is online
s.SetOnConnStart(OnConnStart)
// hook func when the player is offline
s.SetOnConnStop(OnConnStop)
s.Serve()
}
AddRouter() works just like Handle() and HandleFunc() in net/http package.
// in net/http package
func Handle(pattern string, handler Handler)
func HandleFunc(pattern string, handler func(ResponseWriter, *Request))
// in this package
func (mhr *msghandler) AddRouter(msgID uint32, r Router)
The msg types and corresponding routers are defined by the user. Router is an interface that shall be implemented by the user. It contains three methods:
- PreHandle(Request) error
- Handle(Request) error
- PostHandle(Request) error
features
- reader and writer split
- a workerpool to consume taskqueue
- connection management
- tcpdata pack/unpack
- message pack/unpack
- register router handlers for different msg type
- register hook funcs on conn start/stop
- add/get properties for specific connection
protocol:
--------------------------------------
| tcp package |
--------------------------------------
| size | msgid | msg data |
| (4 bytes) | (4 bytes) | |
--------------------------------------
| <---- raw data ----> |
workerpool:
------------------------------
<--- writer G <--- | WorkerPool |
| worker worker ... worker |
------------------------------
| ^ ^ ... ^ |
| | | ... | |
| | | ... | |
---> reader G ---> | taskq taskq ... taskq |
------------------------------
---------- ---------- ----------
taskq: |conn&msg| ---> |conn&msg| ---> |conn&msg| ---> worker
---------- ---------- ----------
req req req