写点什么

长安链源码分析之网络模块 net-liquid(1)

作者:
  • 2022-10-15
    湖南
  • 本文字数:1387 字

    阅读完需:约 1 分钟

本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接:https://github.com/weopenprojects/WeOpen-Star


net-liquid 是长安链自研网络实现。


消息发布及订阅模块(PubSub)是 Liquid 内置的一个应用。


BasicHost(在 net/liquid/host/host.go 中)是 Liquid 内置默认 Host 实现,也是网络初始化的总入口。


core 是核心模块


discovery 是服务发现


学习一样技术,刚开始不懂的时候,只能先按自己理解慢慢摸索,先研究有线索的地方,然后慢慢带出一些不明白的地方,从而弄明白。


现在对 host 的理解不是清晰,先看看对应的测试类,研究里面的方法是做什么的。


先看 host_test.go

里面有一个测试方法 TestHost

	// create host1	host1, err := CreateHost(0, map[peer.ID]ma.Multiaddr{pidList[1]: ma.Join(addr2Target, ma.StringCast("/p2p/"+pidList[1].ToString()))})	require.Nil(t, err)
// create host2 host2, err := CreateHost(1, map[peer.ID]ma.Multiaddr{pidList[0]: ma.Join(addrs[0], ma.StringCast("/p2p/"+pidList[0].ToString()))}) require.Nil(t, err)
复制代码

以上测试代码,创建了 2 个 host.

继续研究 CreateHost


//idx id序号//seeds  一个map  维护了一个节点的id  和对应的地址func CreateHost(idx int, seeds map[peer.ID]ma.Multiaddr) (host.Host, error) {  //cmx509  看着像创建了一个证书池	certPool := cmx509.NewCertPool()  //遍历证书     pem ?	for i := range certPEMs {		certPool.AppendCertsFromPEM(certPEMs[i])	}  //好像是从pme证书里获得私钥	sk, err := asym.PrivateKeyFromPEM(keyPEMs[idx], nil)	if err != nil {		return nil, err	}  //cmTls 创建了一个x509key键值对	tlsCert, err := cmTls.X509KeyPair(certPEMs[idx], keyPEMs[idx])	if err != nil {		return nil, err	}  //创建了一个配置	hostCfg := &HostConfig{		TlsCfg: &cmTls.Config{			Certificates:       []cmTls.Certificate{tlsCert},			InsecureSkipVerify: true,			ClientAuth:         cmTls.RequireAnyClientCert,			VerifyPeerCertificate: func(rawCerts [][]byte, _ [][]*cmx509.Certificate) error {				tlsCertBytes := rawCerts[0]				cert, err := cmx509.ParseCertificate(tlsCertBytes)				if err != nil {					return err				}				_, err = cert.Verify(cmx509.VerifyOptions{Roots: certPool})				if err != nil {					return err				}				return nil			},		},		LoadPidFunc: func(certificates []*cmx509.Certificate) (peer.ID, error) {			pid, err := helper.GetLibp2pPeerIdFromCertDer(certificates[0].Raw)			if err != nil {				return "", err			}			return peer.ID(pid), err		},		SendStreamPoolInitSize:    10,		SendStreamPoolCap:         50,		PeerReceiveStreamMaxCount: 100,		ListenAddresses:           []ma.Multiaddr{addrs[idx]},		DirectPeers:               seeds,		MsgCompress:               false,		PrivateKey:                sk,	}  //基于host配置创建Host	return hostCfg.NewHost(TcpNetwork, context.Background(), logger.NewLogPrinter("HOST"+strconv.Itoa(idx)))}
复制代码

先收集下问题,下篇再去研究这些知识点,一个个突破

1.x509 是什么?

2.X509KeyPair 是什么?

3.PEM 是什么?

用户头像

关注

还未添加个人签名 2018-05-04 加入

还未添加个人简介

评论

发布
暂无评论
长安链源码分析之网络模块net-liquid(1)_李_InfoQ写作社区