dir : node/node.go
api들을 등록
if err := n.startInProc(); err != nil {
return err
}
configure RPC
if n.ipc.endpoint != "" {
if err := n.ipc.start(n.rpcAPIs); err != nil {
// dir : node/rpcstack.go
return err
}
}
servers 인스턴스 생성
var (
servers []*httpServer
openAPIs, allAPIs = n.getAPIs()
)
init http, ws, auth (여기서 함수를 정의 한 후, 조건에 따라 실행
initHttp : func(server *httpServer, port int) error {
if err := server.setListenAddr(...)
if err := server.enableRPC(openAPIs, httpConfig {...}); err != nil {
return nil
}
// servers 배열에 server 추가
servers = append(servers, server)
return nil
}
initWS := func(port int) error {
server := n.wsServerForPort(port false)
// ...
servers = append(servers, server)
return nil
}
initAuth := func(port int, secret []byte) error {
server := n.httpAuth
// ...
servers = append(servers, server)
return nil
}
rpc set up 함수들 실행
if n.config.HTTPHost != "" {
if err := initHttp(n.http, n.config.HTTPPort); err != nil { return err }
}
if n.config,WSHost != "" {
if err := initWS(n.config.WSPort); err != nil { return err }
}
if len(openAPIs) != len(allAPIs) {
jwtSecret, err := n.obtainJWTSecret(n.config.JWTSecret)
// ...
if err := initAuth(n.config.AuthPort, jwtSecret); err != nil { return err }
}
Start servers
for _, server := range servers {
//
if err := server.start(); err != nil {
// dir : node/rpcstack.go
return err
}
}
return nil
node.openEndPoint()