pole_rpc

package module
v0.0.6-beta Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 30, 2021 License: BSD-3-Clause Imports: 3 Imported by: 1

README

pole-rpc

Go Report Card

Very simple RPC remote calling framework, using declarative calling strategy

非常简单的RPC远程调用框架,采用声明式的调用策略

TODO

  • 监听TCP链接的Connect以及DisConnect事件
  • net.Conn的管理
  • RSocketRPC调用实现
  • 使用Option设计模式初始化各个组件
  • logger、基本数据结构、scheduler调度实现
  • 更易于使用的体验
  • metrics指标设置
  • 基于websocket实现RPC调用
  • 基于http2实现RPC调用

Example

func main() {
    ctx, cancelF := context.WithCancel(context.Background())
    defer cancelF()
    
    TestPort = 8000 + rand.Int31n(1000)
    server := createTestServer(ctx)
    // 等待 Server 的启动
    <-server.IsReady
    
    if err := <-server.ErrChan; err != nil {
        t.Error(err)
        return
    }
    
    client, err := createTestClient()
    if err != nil {
        t.Error(err)
        return
    }
    server.RegisterChannelRequestHandler(TestHelloWorld, func (cxt context.Context, rpcCtx RpcServerContext) {
        fmt.Printf("receive client requst : %#v\n", rpcCtx.GetReq())
        for i := 0; i < 10; i++ {
            _ = rpcCtx.Send(&ServerResponse{
                Code: int32(i),
            })
        }
    })
    waitG := sync.WaitGroup{}
    waitG.Add(10)
    
    uuidHolder := atomic.Value{}
    
    call := func (resp *ServerResponse, err error) {
        waitG.Done()
        RpcLog.Info("response %#v", resp)
        assert.Equalf(t, uuidHolder.Load().(string), resp.RequestId, "req-id must equal")
    }
    
    rpcCtx, err := client.RequestChannel(ctx, createTestEndpoint(), call)
    if err != nil {
        t.Error(err)
        return
    }
    
    reqId := uuid.New().String()
    uuidHolder.Store(reqId)
    rpcCtx.Send(&ServerRequest{
        FunName:   TestHelloWorld,
        RequestId: reqId,
    })
    waitG.Wait()
    
    waitG.Add(10)
    reqId = uuid.New().String()
    uuidHolder.Store(reqId)
    rpcCtx.Send(&ServerRequest{
        FunName:   TestHelloWorld,
        RequestId: reqId,
    })
    waitG.Wait()
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewTransportClient

func NewTransportClient(options ...api.ClientOptions) (api.TransportClient, error)

NewTransportClient 构建一个 TransportClient

func NewTransportServer

func NewTransportServer(ctx context.Context, options ...api.ServerOptions) (api.TransportServer, error)

NewTransportServer 构建一个 TransportServer

Types

This section is empty.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL