func InitRouter() (err error) { var ( network, addr string ) routerRing = ketama.NewRing(ketama.Base) for serverId, addrs := range Conf.RouterRPCAddrs { // WARN r must every recycle changed for reconnect var ( r *rpc.Client routerQuit = make(chan struct{}, 1) ) if network, addr, err = inet.ParseNetwork(addrs); err != nil { log.Error("inet.ParseNetwork() error(%v)", err) return } r, err = rpc.Dial(network, addr) if err != nil { log.Error("rpc.Dial(\"%s\", \"%s\") error(%s)", network, addr, err) } go rpc.Reconnect(&r, routerQuit, network, addr) log.Debug("router rpc addr:%s connect", addr) routerServiceMap[serverId] = &r routerRing.AddNode(serverId, 1) } routerRing.Bake() return }
func InitCometRpc(addrs map[int32]string) (err error) { for serverID, addrs := range addrs { var ( rpcClient *protorpc.Client quit chan struct{} network, addr string ) if network, addr, err = inet.ParseNetwork(addrs); err != nil { log.Error("inet.ParseNetwork() error(%v)", err) return } rpcClient, err = protorpc.Dial(network, addr) if err != nil { log.Error("protorpc.Dial(\"%s\") error(%s)", addr, err) return } go protorpc.Reconnect(&rpcClient, quit, network, addr) log.Info("rpc addr:%s connected", addr) cometServiceMap[serverID] = &rpcClient } return }
func InitLogicRpc(network, addr string) (err error) { logicRpcClient, err = protorpc.Dial(network, addr) if err != nil { log.Error("rpc.Dial(\"%s\", \"%s\") error(%s)", network, addr, err) } go protorpc.Reconnect(&logicRpcClient, logicRpcQuit, network, addr) log.Debug("logic rpc addr %s:%s connected", network, addr) return }
func InitLogicRpc(addrs string) (err error) { var network, addr string if network, addr, err = inet.ParseNetwork(addrs); err != nil { log.Error("inet.ParseNetwork() error(%v)", err) return } logicRpcClient, err = protorpc.Dial(network, addr) if err != nil { log.Error("rpc.Dial(\"%s\", \"%s\") error(%s)", network, addr, err) } go protorpc.Reconnect(&logicRpcClient, logicRpcQuit, network, addr) log.Debug("logic rpc addr %s:%s connected", network, addr) return }
func InitCometRpc(addrs map[int32]string) (err error) { for serverID, addr := range addrs { var rpcClient *protorpc.Client rpcClient, err = protorpc.Dial("tcp", addr) if err != nil { log.Error("protorpc.Dial(\"%s\") error(%s)", addr, err) return } var quit chan struct{} go protorpc.Reconnect(&rpcClient, quit, "tcp", addr) log.Info("rpc addr:%s connected", addr) cometServiceMap[serverID] = rpcClient } return }
func InitRouterRpc(addrs []string) (err error) { var r *protorpc.Client routerRing = ketama.NewRing(ketama.Base) for _, addr := range addrs { r, err = protorpc.Dial("tcp", addr) if err != nil { log.Error("protorpc.Dial(\"%s\") error(%s)", addr, err) return } var quit chan struct{} go protorpc.Reconnect(&r, quit, "tcp", addr) log.Debug("router protorpc addr:%s connect", addr) routerServiceMap[addr] = r routerRing.AddNode(addr, 1) } routerRing.Bake() return }
func InitRouter() (err error) { var ( r *rpc.Client i = 0 ) routerRing = ketama.NewRing(ketama.Base) for serverId, addr := range Conf.RouterRPCAddrs { r, err = rpc.Dial(Conf.RouterRPCNetworks[i], addr) if err != nil { log.Error("rpc.Dial(\"%s\", \"%s\") error(%s)", Conf.RouterRPCNetworks[i], addr, err) return } go rpc.Reconnect(&r, routerQuit, Conf.RouterRPCNetworks[i], addr) log.Debug("router rpc addr:%s connect", addr) routerServiceMap[serverId] = r routerRing.AddNode(serverId, 1) i++ } routerRing.Bake() return }
func TestProtoError(t *testing.T) { if runtime.GOOS == "plan9" { t.Skip("skipping test; see http://golang.org/issue/8908") } defer func() { err := recover() if err == nil { t.Fatal("no error") } if !strings.Contains("reading body proto: wrong wireType = 2 for field C", err.(error).Error()) { t.Fatal("expected proto', got", err) } }() protorpc.Register(new(S)) listen, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { panic(err) } go protorpc.Accept(listen) client, err := protorpc.Dial("tcp", listen.Addr().String()) if err != nil { panic(err) } go protorpc.Reconnect(&client, make(chan struct{}, 1), "tcp", listen.Addr().String()) var reply Reply err = client.Call("S.Recv", nil, &reply) if err != nil { panic(err) } fmt.Printf("%#v\n", reply) client.Close() listen.Close() }