@@ -283,46 +283,38 @@ startRPC,这个方法收集所有的apis。 并依次调用启动各个RPC服务
283
283
}
284
284
285
285
286
- startXXX 是具体的RPC的启动。 流程都是大同小异。 这里就只看startWS了
286
+ startXXX 是具体的RPC的启动, 流程都是大同小异。在v1.8.12 版本中 node\node.go 文件中startIPC()、startHTTP()、startWS()三个方法的具体启动方式封装到 rpc\endpoints.go 文件对应函数中
287
287
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
309
303
}
304
+ log.Debug("WebSocket registered", "service", api.Service, "namespace", api.Namespace)
310
305
}
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
+ }
326
320
327
- return nil
328
- }
0 commit comments