diff --git a/README.md b/README.md index e7f5805..67ffedd 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ cluster.json如下: "ListenAddr":"127.0.0.1:8001", "MaxRpcParamLen": 409600, "NodeName": "Node_Test1", - "remark":"//以_打头的,表示只在本机进程,不对整个子网开发", + "remark":"//以_打头的,表示只在本机进程,不对整个子网公开", "ServiceList": ["TestService1","TestService2","TestServiceCall","GateService","_TcpService","HttpService","WSService"] }, { @@ -65,7 +65,7 @@ cluster.json如下: "ListenAddr":"127.0.0.1:8002", "MaxRpcParamLen": 409600, "NodeName": "Node_Test1", - "remark":"//以_打头的,表示只在本机进程,不对整个子网开发", + "remark":"//以_打头的,表示只在本机进程,不对整个子网公开", "ServiceList": ["TestService1","TestService2","TestServiceCall","GateService","TcpService","HttpService","WSService"] } ] diff --git a/network/tcp_client.go b/network/tcp_client.go index c74d8ce..93271ed 100644 --- a/network/tcp_client.go +++ b/network/tcp_client.go @@ -56,11 +56,11 @@ func (client *TCPClient) init() { } if client.ReadDeadline == 0 { client.ReadDeadline = 15*time.Second - log.SRelease("invalid ReadDeadline, reset to ", client.ReadDeadline,"s") + log.SRelease("invalid ReadDeadline, reset to ", int64(client.ReadDeadline.Seconds()),"s") } if client.WriteDeadline == 0 { client.WriteDeadline = 15*time.Second - log.SRelease("invalid WriteDeadline, reset to ", client.WriteDeadline,"s") + log.SRelease("invalid WriteDeadline, reset to ", int64(client.WriteDeadline.Seconds()),"s") } if client.NewAgent == nil { log.SFatal("NewAgent must not be nil") @@ -79,6 +79,13 @@ func (client *TCPClient) init() { client.msgParser = msgParser } +func (client *TCPClient) GetCloseFlag() bool{ + client.Lock() + defer client.Unlock() + + return client.closeFlag +} + func (client *TCPClient) dial() net.Conn { for { conn, err := net.Dial("tcp", client.Addr) diff --git a/network/tcp_server.go b/network/tcp_server.go index c12a570..4cf479f 100644 --- a/network/tcp_server.go +++ b/network/tcp_server.go @@ -7,8 +7,8 @@ import ( "time" ) -const Default_ReadDeadline = 30 //30s -const Default_WriteDeadline = 30 //30s +const Default_ReadDeadline = time.Second*30 //30s +const Default_WriteDeadline = time.Second*30 //30s const Default_MaxConnNum = 3000 const Default_PendingWriteNum = 10000 const Default_LittleEndian = false @@ -70,11 +70,11 @@ func (server *TCPServer) init() { } if server.WriteDeadline == 0 { - server.WriteDeadline = time.Second*Default_WriteDeadline + server.WriteDeadline = Default_WriteDeadline log.SRelease("invalid WriteDeadline, reset to ", server.WriteDeadline.Seconds(),"s") } if server.ReadDeadline == 0 { - server.ReadDeadline = time.Second*Default_ReadDeadline + server.ReadDeadline = Default_ReadDeadline log.SRelease("invalid ReadDeadline, reset to ", server.ReadDeadline.Seconds(),"s") } diff --git a/rpc/client.go b/rpc/client.go index 98357f2..616f6f7 100644 --- a/rpc/client.go +++ b/rpc/client.go @@ -6,7 +6,6 @@ import ( "fmt" "github.com/duanhf2012/origin/log" "github.com/duanhf2012/origin/network" - "github.com/duanhf2012/origin/util/timer" "math" "reflect" "runtime" @@ -32,6 +31,9 @@ type Client struct { TriggerRpcEvent } +const MaxCheckCallRpcCount = 1000 +const MaxPendingWriteNum = 200000 +const ConnectInterval = 2*time.Second var clientSeq uint32 func (client *Client) NewClientAgent(conn *network.TCPConn) network.Agent { @@ -41,18 +43,23 @@ func (client *Client) NewClientAgent(conn *network.TCPConn) network.Agent { return client } + func (client *Client) Connect(id int, addr string, maxRpcParamLen uint32) error { client.clientSeq = atomic.AddUint32(&clientSeq, 1) client.id = id client.Addr = addr - client.maxCheckCallRpcCount = 1000 + client.maxCheckCallRpcCount = MaxCheckCallRpcCount client.callRpcTimeout = 15 * time.Second - client.ConnNum = 1 - client.ConnectInterval = time.Second * 2 - client.PendingWriteNum = 200000 + client.ConnectInterval = ConnectInterval + client.PendingWriteNum = MaxPendingWriteNum client.AutoReconnect = true + + client.ConnNum = 1 client.LenMsgLen = 4 client.MinMsgLen = 2 + client.ReadDeadline = Default_ReadWriteDeadline + client.WriteDeadline = Default_ReadWriteDeadline + if maxRpcParamLen > 0 { client.MaxMsgLen = maxRpcParamLen } else { @@ -73,17 +80,13 @@ func (client *Client) Connect(id int, addr string, maxRpcParamLen uint32) error } func (client *Client) startCheckRpcCallTimer() { - t := timer.NewTimer(5 * time.Second) for { - select { - case cTimer := <-t.C: - cTimer.SetupTimer(time.Now()) - client.checkRpcCallTimeout() + time.Sleep(5 * time.Second) + if client.GetCloseFlag() == true { + break } + client.checkRpcCallTimeout() } - - t.Cancel() - timer.ReleaseTimer(t) } func (client *Client) makeCallFail(call *Call) { diff --git a/rpc/server.go b/rpc/server.go index 6d5dcc5..a75ab94 100644 --- a/rpc/server.go +++ b/rpc/server.go @@ -63,7 +63,7 @@ func (server *Server) Init(rpcHandleFinder RpcHandleFinder) { server.rpcServer = &network.TCPServer{} } -const Default_ReadWriteDeadline = 10*time.Second +const Default_ReadWriteDeadline = 15*time.Second func (server *Server) Start(listenAddr string, maxRpcParamLen uint32) { splitAddr := strings.Split(listenAddr, ":") @@ -84,8 +84,8 @@ func (server *Server) Start(listenAddr string, maxRpcParamLen uint32) { server.rpcServer.PendingWriteNum = 2000000 server.rpcServer.NewAgent = server.NewAgent server.rpcServer.LittleEndian = LittleEndian - server.rpcServer.WriteDeadline = network.Default_WriteDeadline - server.rpcServer.ReadDeadline = network.Default_WriteDeadline + server.rpcServer.WriteDeadline = Default_ReadWriteDeadline + server.rpcServer.ReadDeadline = Default_ReadWriteDeadline server.rpcServer.Start() }