Skip to content

Commit

Permalink
other: v2 rpc 优化
Browse files Browse the repository at this point in the history
  • Loading branch information
kercylan98 committed May 12, 2024
1 parent 6f657da commit 5a1067a
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 1 deletion.
10 changes: 10 additions & 0 deletions rpc/rpc2/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package rpc

// Client 是一个 RPC 客户端的接口,该接口用于定义一个 RPC 客户端,用于发起 RPC 调用
type Client interface {
// Tell 用于向指定的服务发起一个 RPC 调用,该调用不需要返回值
Tell(route Route, data any) error

// Ask 用于向指定的服务发起一个 RPC 调用,该调用需要返回值
Ask(route Route, data any) (Context, error)
}
10 changes: 10 additions & 0 deletions rpc/rpc2/codec.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package rpc

// Codec 是一个 RPC 编解码器的接口,该接口用于定义一个 RPC 编解码器,用于在 RPC 调用过程中对数据进行编解码
type Codec interface {
// Encode 用于对数据进行编码
Encode(data any) ([]byte, error)

// Decode 用于对数据进行解码
Decode(data []byte, dst any) error
}
13 changes: 13 additions & 0 deletions rpc/rpc2/context.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package rpc

// Context 是一个 RPC 调用上下文的接口,该接口用于在 RPC 调用过程中传递上下文信息
type Context interface {
// ReadTo 对于被调用方,ReadTo 方法用于将上下文信息读取到指定的结构体中
ReadTo(dst any) error

// MustReadTo 对于被调用方,MustReadTo 方法用于将上下文信息读取到指定的结构体中,如果读取失败则会 panic
MustReadTo(dst any)

// Write 对于调用方,Write 方法用于将上下文信息写入到上下文中
Write(src any) error
}
10 changes: 10 additions & 0 deletions rpc/rpc2/message.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package rpc

// Message 是一个 RPC 消息的接口,该接口用于定义一个 RPC 消息,用于在 RPC 调用过程中传递
type Message interface {
// GetRoute 用于获取消息的路由
GetRoute() Route

// GetBytes 用于获取消息的字节数据
GetBytes() []byte
}
16 changes: 16 additions & 0 deletions rpc/rpc2/router.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package rpc

// Route 是一个 RPC 路由的接口,该接口用于定义一个 RPC 路由
type Route = string

// RouteHandler 是一个 RPC 路由处理器的类型,该类型用于定义一个 RPC 路由处理器
type RouteHandler func(ctx Context)

// Router 是 RPC 路由器的接口,该接口被用于 RPC 服务路由的注册及调用路由的匹配
type Router interface {
// Register 用于注册一个 RPC 服务路由,当存在相同路由时会发生 panic
Register(route Route, handler RouteHandler)

// Match 用于根据 RPC 服务名匹配对应的路由处理器,如果找到则返回对应的处理器,否则返回 nil
Match(route Route) RouteHandler
}
2 changes: 1 addition & 1 deletion vivid/actor_id.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,5 +101,5 @@ func (i ActorId) IsZero() bool {

// String 返回 ActorId 的字符串表示。
func (i ActorId) String() string {
return fmt.Sprintf("%s:%d:%d", i.Host(), i.Port(), i.Guid())
return fmt.Sprintf("%s:%d:%s:%d", i.Host(), i.Port(), i.SystemName(), i.Guid())
}
60 changes: 60 additions & 0 deletions vivid/actor_id_benchmark_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,68 @@ import (
"testing"
)

func BenchmarkActorId(b *testing.B) {
id := vivid.NewActorId("127.0.0.1", 8080, "Connection", 1)
b.Run("Generate", func(b *testing.B) {
for i := 0; i < b.N; i++ {
vivid.NewActorId("127.0.0.1", 8080, "Connection", 1)
}
})

b.Run("GetHost", func(b *testing.B) {
for i := 0; i < b.N; i++ {
id.Host()
}
})

b.Run("GetPort", func(b *testing.B) {
for i := 0; i < b.N; i++ {
id.Port()
}
})

b.Run("GetSystemName", func(b *testing.B) {
for i := 0; i < b.N; i++ {
id.SystemName()
}
})

b.Run("GetGuid", func(b *testing.B) {
for i := 0; i < b.N; i++ {
id.Guid()
}
})
}

func BenchmarkNewActorId(b *testing.B) {
for i := range uint64(b.N) {
vivid.NewActorId("127.0.0.1", 8080, "Connection", i)
}
}

func BenchmarkActorId_Get(b *testing.B) {
id := vivid.NewActorId("127.0.0.1", 8080, "Connection", 1)
b.Run("GetHost", func(b *testing.B) {
for i := 0; i < b.N; i++ {
id.Host()
}
})

b.Run("GetPort", func(b *testing.B) {
for i := 0; i < b.N; i++ {
id.Port()
}
})

b.Run("GetSystemName", func(b *testing.B) {
for i := 0; i < b.N; i++ {
id.SystemName()
}
})

b.Run("GetGuid", func(b *testing.B) {
for i := 0; i < b.N; i++ {
id.Guid()
}
})
}

0 comments on commit 5a1067a

Please sign in to comment.