Skip to content

Commit

Permalink
perf: invoker cache
Browse files Browse the repository at this point in the history
  • Loading branch information
joway committed Oct 11, 2024
1 parent 0ea792f commit e273f05
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions server/streamxserver/server_gen.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@ import (
"context"
"errors"
"reflect"
"sync"

"github.com/cloudwego/kitex/pkg/serviceinfo"
"github.com/cloudwego/kitex/pkg/streamx"
)

var invokerCache sync.Map

func InvokeStream[Req, Res any](
ctx context.Context, smode serviceinfo.StreamingMode,
handler any, reqArgs streamx.StreamReqArgs, resArgs streamx.StreamResArgs) (err error) {
Expand Down Expand Up @@ -36,9 +39,16 @@ func InvokeStream[Req, Res any](
}

// handler call
// TODO: cache handler
rhandler := reflect.ValueOf(shandler.Handler)
mhandler := rhandler.MethodByName(sArgs.Stream().Method())
cacheKey := reflect.TypeOf(shandler.Handler).String() + sArgs.Stream().Method()
var mhandler reflect.Value
if v, ok := invokerCache.Load(cacheKey); ok {
mhandler = v.(reflect.Value)
} else {
rhandler := reflect.ValueOf(shandler.Handler)
mhandler = rhandler.MethodByName(sArgs.Stream().Method())
invokerCache.Store(cacheKey, mhandler)
}

streamInvoke := func(ctx context.Context, streamArgs streamx.StreamArgs, reqArgs streamx.StreamReqArgs, resArgs streamx.StreamResArgs) (err error) {
switch smode {
case serviceinfo.StreamingUnary:
Expand Down

0 comments on commit e273f05

Please sign in to comment.