Skip to content

Commit 0c9d4f4

Browse files
authored
Merge pull request #17 from jialinpeng/patch-1
在v1.8.12 版本中 node\node.go 文件中startIPC()等方法有更新
2 parents d302c02 + ca49ce5 commit 0c9d4f4

File tree

1 file changed

+31
-39
lines changed

1 file changed

+31
-39
lines changed

node源码分析.md

+31-39
Original file line numberDiff line numberDiff line change
@@ -283,46 +283,38 @@ startRPC,这个方法收集所有的apis。 并依次调用启动各个RPC服务
283283
}
284284

285285

286-
startXXX 是具体的RPC的启动流程都是大同小异。 这里就只看startWS了
286+
startXXX 是具体的RPC的启动流程都是大同小异。在v1.8.12 版本中 node\node.go 文件中startIPC()、startHTTP()、startWS()三个方法的具体启动方式封装到 rpc\endpoints.go 文件对应函数中
287287

288-
// startWS initializes and starts the websocket RPC endpoint.
289-
func (n *Node) startWS(endpoint string, apis []rpc.API, modules []string, wsOrigins []string, exposeAll bool) error {
290-
// Short circuit if the WS endpoint isn't being exposed
291-
if endpoint == "" {
292-
return nil
293-
}
294-
// Generate the whitelist based on the allowed modules
295-
// 生成白名单
296-
whitelist := make(map[string]bool)
297-
for _, module := range modules {
298-
whitelist[module] = true
299-
}
300-
// Register all the APIs exposed by the services
301-
handler := rpc.NewServer()
302-
for _, api := range apis {
303-
if exposeAll || whitelist[api.Namespace] || (len(whitelist) == 0 && api.Public) {
304-
// 只有这集中情况下才会把这个api进行注册。
305-
if err := handler.RegisterName(api.Namespace, api.Service); err != nil {
306-
return err
307-
}
308-
log.Debug(fmt.Sprintf("WebSocket registered %T under '%s'", api.Service, api.Namespace))
288+
// StartWSEndpoint starts a websocket endpoint
289+
func StartWSEndpoint(endpoint string, apis []API, modules []string, wsOrigins []string, exposeAll bool) (net.Listener, *Server, error) {
290+
291+
// Generate the whitelist based on the allowed modules
292+
// 生成白名单
293+
whitelist := make(map[string]bool)
294+
for _, module := range modules {
295+
whitelist[module] = true
296+
}
297+
// Register all the APIs exposed by the services
298+
handler := NewServer()
299+
for _, api := range apis {
300+
if exposeAll || whitelist[api.Namespace] || (len(whitelist) == 0 && api.Public) { // 只有这几种情况下才会把这个api进行注册。
301+
if err := handler.RegisterName(api.Namespace, api.Service); err != nil {
302+
return nil, nil, err
309303
}
304+
log.Debug("WebSocket registered", "service", api.Service, "namespace", api.Namespace)
310305
}
311-
// All APIs registered, start the HTTP listener
312-
var (
313-
listener net.Listener
314-
err error
315-
)
316-
if listener, err = net.Listen("tcp", endpoint); err != nil {
317-
return err
318-
}
319-
go rpc.NewWSServer(wsOrigins, handler).Serve(listener)
320-
log.Info(fmt.Sprintf("WebSocket endpoint opened: ws://%s", listener.Addr()))
321-
322-
// All listeners booted successfully
323-
n.wsEndpoint = endpoint
324-
n.wsListener = listener
325-
n.wsHandler = handler
306+
}
307+
// All APIs registered, start the HTTP listener
308+
// 所有 APIs 都已经注册,启动 HTTP 监听器
309+
var (
310+
listener net.Listener
311+
err error
312+
)
313+
if listener, err = net.Listen("tcp", endpoint); err != nil {
314+
return nil, nil, err
315+
}
316+
go NewWSServer(wsOrigins, handler).Serve(listener)
317+
return listener, handler, err
318+
319+
}
326320

327-
return nil
328-
}

0 commit comments

Comments
 (0)