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