You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.1 KiB

7 years ago
package traffic
import (
"net"
"net/rpc"
"sync"
"github.com/mafanr/juz/misc"
"github.com/mafanr/g"
"go.uber.org/zap"
)
var traffic *Traffic
type Traffic struct {
Strategies *sync.Map
}
func (t *Traffic) Start() {
// 初始化mysql连接
misc.InitMysql()
// 加载配置数据
t.Strategies = &sync.Map{}
t.loadData()
// 启动rpc服务
t.startRpcServer()
traffic = t
}
func (t *Traffic) Shutdown() {
7 years ago
g.L.Info("shutdown tfe..")
7 years ago
}
type RateLimiter struct{}
// 请不要修改该函数用来测试rpc是否存活
func (rl *RateLimiter) Ping(req int, reply *int) error {
*reply = 1
return nil
}
func (t *Traffic) startRpcServer() {
rl := new(RateLimiter)
server := rpc.NewServer()
err := server.Register(rl)
if err != nil {
7 years ago
g.L.Fatal("register error", zap.Error(err))
7 years ago
}
7 years ago
g.L.Info("Listen tcp on port", zap.String("port", misc.Conf.Traffic.Port))
7 years ago
l, err := net.Listen("tcp", ":"+misc.Conf.Traffic.Port)
if err != nil {
7 years ago
g.L.Fatal("listen error", zap.Error(err))
7 years ago
}
go func() {
for {
conn, err := l.Accept()
if err != nil {
7 years ago
g.L.Error("accept error", zap.Error(err))
7 years ago
continue
}
server.ServeConn(conn)
}
}()
}