github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/rpc/endpoints.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:45</date> 10 //</624342664136888320> 11 12 13 package rpc 14 15 import ( 16 "net" 17 18 "github.com/ethereum/go-ethereum/log" 19 ) 20 21 //starthttpendpoint启动用cors/vhosts/modules配置的HTTP RPC终结点 22 func StartHTTPEndpoint(endpoint string, apis []API, modules []string, cors []string, vhosts []string, timeouts HTTPTimeouts) (net.Listener, *Server, error) { 23 //根据允许的模块生成白名单 24 whitelist := make(map[string]bool) 25 for _, module := range modules { 26 whitelist[module] = true 27 } 28 //注册服务公开的所有API 29 handler := NewServer() 30 for _, api := range apis { 31 if whitelist[api.Namespace] || (len(whitelist) == 0 && api.Public) { 32 if err := handler.RegisterName(api.Namespace, api.Service); err != nil { 33 return nil, nil, err 34 } 35 log.Debug("HTTP registered", "namespace", api.Namespace) 36 } 37 } 38 //所有已注册的API,启动HTTP侦听器 39 var ( 40 listener net.Listener 41 err error 42 ) 43 if listener, err = net.Listen("tcp", endpoint); err != nil { 44 return nil, nil, err 45 } 46 go NewHTTPServer(cors, vhosts, timeouts, handler).Serve(listener) 47 return listener, handler, err 48 } 49 50 //startwsendpoint启动WebSocket终结点 51 func StartWSEndpoint(endpoint string, apis []API, modules []string, wsOrigins []string, exposeAll bool) (net.Listener, *Server, error) { 52 53 //根据允许的模块生成白名单 54 whitelist := make(map[string]bool) 55 for _, module := range modules { 56 whitelist[module] = true 57 } 58 //注册服务公开的所有API 59 handler := NewServer() 60 for _, api := range apis { 61 if exposeAll || whitelist[api.Namespace] || (len(whitelist) == 0 && api.Public) { 62 if err := handler.RegisterName(api.Namespace, api.Service); err != nil { 63 return nil, nil, err 64 } 65 log.Debug("WebSocket registered", "service", api.Service, "namespace", api.Namespace) 66 } 67 } 68 //所有已注册的API,启动HTTP侦听器 69 var ( 70 listener net.Listener 71 err error 72 ) 73 if listener, err = net.Listen("tcp", endpoint); err != nil { 74 return nil, nil, err 75 } 76 go NewWSServer(wsOrigins, handler).Serve(listener) 77 return listener, handler, err 78 79 } 80 81 //StartIPCendPoint启动IPC终结点。 82 func StartIPCEndpoint(ipcEndpoint string, apis []API) (net.Listener, *Server, error) { 83 //注册服务公开的所有API。 84 handler := NewServer() 85 for _, api := range apis { 86 if err := handler.RegisterName(api.Namespace, api.Service); err != nil { 87 return nil, nil, err 88 } 89 log.Debug("IPC registered", "namespace", api.Namespace) 90 } 91 //所有已注册的API,启动IPC侦听器。 92 listener, err := ipcListen(ipcEndpoint) 93 if err != nil { 94 return nil, nil, err 95 } 96 go handler.ServeListener(listener) 97 return listener, handler, nil 98 } 99