之前的章节在介绍服务端和客户端的时候提到消息(请求)的处理逻辑在 handler.go
文件中,本文就分析一下该文件的内容。
处理消息又分为处理批量消息和处理单个消息,因为处理单个消息是处理批量消息的特例,本文只介绍处理批量消息,即从 handleBatch()
方法开始。
处理流程
具体的处理流程先㕷一个流程图吧。
调用时机
该流程的调用时机是服务端处理 HTTP
请求 (用 serveSingleRequest
来处理) 和 dispatch
流程 (调用时机前文有介绍,初始化 RPC
客户端,且非 HTTP
请求的时候) 读取信息的时候。
而 RPC
客户端初始化又包括两个方面,一是真正创建 RPC
客户端的时候,二是服务端处理非 HTTP
请求 (用 ServeCodec
来处理) 。
输入
该流程的输入是一条(或多条)消息(或请求)。
简单解释
这个图从宏观上可以分为左、中、右三列,其中,左、中两列为服务端的处理流程,右列为客户端的处理流程。而右列的上半部分是处理客户端普通消息的流程,而下半部分是处理客户端订阅消息的流程。
再说左、中两列,左列为服务端要推送订阅消息的流程,中列则是服务端去调用以太坊预先定义的 API
接口的流程。