Skip to content

pzhen/gotcp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gotcp 是采用golang,以面向接口方式开发的,轻量级的,TCP框架.

Features

  • Golang开发-并发处理请求
  • 面向接口-灵活扩展
  • Request封装-消息数据与请求的包装
  • Message封装-粘包问题处理
  • Router封装-多路由模式,灵活注册路由来处理不同消息
  • 读写分离
  • 消息队列及多任务处理(work pool)
  • 链接管理-在创建后与销毁之前灵活处理

Getting Started

Installing

$ go get github.com/pzhen/gotcp

Usage

项目中配置配置文件

conf/gotcp.json

{
  "Name": "MyTcpServer",
  "Address": "127.0.0.1:9888",
  "MaxConn": 1,
  "MaxPkgSize": 512,
  "Network":"tcp4",
  "WorkPoolSize":10
 }

server.go

package main

import (
	"fmt"
	"gotcp/Gotcp"
	"gotcp/Igotcp"
	_ "net/http/pprof"
)

type MyRouter1 struct {
	Gotcp.BaseRouter
}

type MyRouter2 struct {
	Gotcp.BaseRouter
}

//业务处理前
func (m *MyRouter1) BeforeHandle(r Igotcp.IRequest) {
	if err := r.GetConnector().Send(1, []byte("MyRouter1==>BeforeHandle")); err != nil {
		fmt.Println(err)
	}
}

//业务处理
func (m *MyRouter1) Handle(r Igotcp.IRequest) {
	if err := r.GetConnector().Send(1, []byte("MyRouter1==>Handle")); err != nil {
		fmt.Println(err)
	}
}

//业务处理后
func (m *MyRouter1) AfterHandle(r Igotcp.IRequest) {
	if err := r.GetConnector().Send(1, []byte("MyRouter1==>AfterHandle")); err != nil {
		fmt.Println(err)
	}
}

//直接处理业务
func (m *MyRouter2) Handle(r Igotcp.IRequest) {
	if err := r.GetConnector().Send(1, []byte("MyRouter2==>handle")); err != nil {
		fmt.Println(err)
	}
}

//连接器创建后做一些处理
func onConnect(connector Igotcp.IConnector) {
	connector.Send(1, []byte("onConnect"))
}

//连接器销毁前做一些处理
func offConnect(connector Igotcp.IConnector) {
	connector.Send(2, []byte("offConnect"))
}

func main() {
	//init server
	srv := Gotcp.InitServer()

	//注册路由
	srv.AddRouter(1, &MyRouter1{})
	srv.AddRouter(2, &MyRouter2{})

	//注册Hook
	srv.SetOnConnStart(onConnect)
	srv.SetOnConnStop(offConnect)

	//启动服务
	srv.Run()
}

License

About

golang tcp server framework

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages