gorpc之serverWriter

```go

func serverWriter(s *Server, w io.Writer, clientAddr string, responsesChan <-chan *serverMessage, stopChan <-chan struct{}, done chan<- struct{}, enabledCompression bool) {

defer func() { close(done) }()

e := newMessageEncoder(w, s.SendBufferSize, enabledCompression, &s.Stats)

defer e.Close()

var flushChan <-chan time.Time

t := time.NewTimer(s.FlushDelay)

var wr wireResponse

for {

var m *serverMessage

select {

case m = <-responsesChan:

default:

// Give the last chance for ready goroutines filling responsesChan :)

runtime.Gosched()

select {

case <-stopChan:

return

case m = <-responsesChan:

case <-flushChan:

if err := e.Flush(); err != nil {

if !isServerStop(stopChan) {

s.LogError("gorpc.Server: [%s]->[%s]: Cannot flush responses to underlying stream: [%s]", clientAddr, s.Addr, err)

}

return

}

flushChan = nil

continue

}

}

if flushChan == nil {

flushChan = getFlushChan(t, s.FlushDelay)

}

wr.ID = m.ID

wr.Response = m.Response

wr.Error = m.Error

m.Response = nil

m.Error = ""

serverMessagePool.Put(m)

if err := e.Encode(wr); err != nil {

s.LogError("gorpc.Server: [%s]->[%s]. Cannot send response to wire: [%s]", clientAddr, s.Addr, err)

return

}

wr.Response = nil

wr.Error = ""

s.Stats.incRPCCalls()

}

}

```

- 和Reader不同的是,没有宕机保护。相同的是,在函数结束时通过(close(done))通知上层。

- 申请了一个messageEncoder,对消息进行处理

- 接受从responsesChan接受来自Reader的消息。

- runtime.Gosched()让出时间片给Reader写入channel。并且接收stopChan通知结束。

- flushChan通过FlushDelay定义,主要是执行e.Flush()

- 同时定义了wireResponses交由Encode处理,并将用完的msg放回消息池中。

1. 接下来需要研究一下 decode和encoder

2. 同时需要研究一下gob编码,和实际的rpc处理内容

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 车站真是一个神奇的地方。它见多了悲欢离合,所以它从不因为分离而感到悲伤,亦不会因为重逢替你感到喜悦。它就是那...
    之夏的夏天阅读 264评论 0 0
  • 时间真是个狂奔的孩子,抓都抓不住,一眨眼,二十岁了,
    江易依阅读 256评论 0 0
  • “输了就是输了,没有什么可庆祝和什么重在参与的安慰,我知道这次比赛你突破了自己的极限,但无法打败他人,那...
    梁英旗鸽阅读 690评论 3 4
  • 今天是一个特别的日子。36期PPT毕业演讲秀在成都顺利完成,感谢36期每一位伙伴的用心付出。感谢PPT营销力的教练...
    木子馠阅读 89评论 0 0

友情链接更多精彩内容