美文网首页
golang rpc源码问题记录

golang rpc源码问题记录

作者: xikaka | 来源:发表于2018-09-06 16:45 被阅读0次
  1. 源码位置 net/rpc/server.go

数据结构


// Server represents an RPC Server.

type Server struct {

serviceMap sync.Map  // map[string]*service

  reqLock    sync.Mutex // protects freeReq

  freeReq    *Request

  respLock  sync.Mutex // protects freeResp

  freeResp  *Response

}

// 成员函数

func (server *Server)freeRequest(req *Request)

func (server *Server)getRequest() *Request {

        server.reqLock.Lock()

        req := server.freeReq

        if req == nil {

            req =new(Request)

        }else {

            server.freeReq = req.next

            //错误, 此处新建了Request,取代了req原始指向的对象, 应该删除此行,直接返回req, 达到Request对象复用的效果

            *req =Request{}

        }

        server.reqLock.Unlock()

        return req

}

在结构体Server中维护了freeReq, freeResp链表,用于复用request和response。 但是在getRequest函数里, 源码中将freeReq头节点指向第二个节点, 并新建了一个Request{}作为结果返回。正确的做法应该是将头节点从链表中删除,然后将头节点返回,从而达到对象复用的效果。

相关文章

  • golang rpc源码问题记录

    源码位置 net/rpc/server.go 数据结构 在结构体Server中维护了freeReq, freeRe...

  • 常见问题之Golang——error: RPC failed;

    常见问题之Golang——error: RPC failed; curl 28 OpenSSL SSL_read:...

  • golang-rpc

    参考 golang中的RPC调用服务器方法 golang rpc的两种调用方法 Go官方库RPC开发指南 示例 s...

  • gRPC基于Golang和Java的简单实现

    原文连接: 一文了解RPC以及gRPC基于Golang和Java的简单实现 一:什么是RPC 简介:RPC:Re...

  • Centos7源码安装Golang

    源码安装Golang 下载Golang 源码wget https://studygolang.com/dl/gol...

  • golang RPC

    1、RPC流水线工程 ① Client以本地调用的方式调用服务 ② Client Stub接收到调用后,把服务调用...

  • golang rpc

    rpc是什么 RPC(Remote Procedure Call)是远程过程调用,通俗的说就是调用远处的一个函数。...

  • golang grpc

    golang grpc rpc种类 grpc含义 gRPC是Google的RPC框架,开源、高性能、跨语言,基于H...

  • Go map底层实现

    golang map源码详解Golang map 如何进行删除操作?

  • RPC / JSON-RPC in Golang

    RPC(Remote Procedure Call)—— 远程过程调用。通过它可以使函数调用模式网络化。客户端就像...

网友评论

      本文标题:golang rpc源码问题记录

      本文链接:https://www.haomeiwen.com/subject/ewixgftx.html