Nkn-sdk-go,里面的通信协议具体实现在哪里看

nkn-sdk-go,里面的通信协议具体实现在哪里看,想添加一个内容(每次传输的对端tunnel的地址)

sdk 消息协议用的是这个 pb

不过除非这个信息对编解码有帮助,并且不需要加密,否则更加适合的是加在应用层

我就是想,加个到对面tunnel的地址,可以通过协议动态实现的这种。我在nkn-tunnel里面只找到相对应的tunnel结构体,没找到对应的通信协议,这种应该更适合加在应用层吧(对面tunnel的地址)

nkn-tunnel 有两种模式,免费的 relay 模式用的是 sdk 里面的 dial,底层用的是 multiclient 的消息 + ncp-go 的 session;付费的 tuna 模式用的是 nkn-tuna-session 来创建 session,底层用的是 tuna reverse 模式 + ncp-go 的 session。无论哪一种,tunnel 的地址就是对面的 multiclient 地址。如果有自定义的需求的话,感觉加在应用层比较方便

谢谢大佬,
func (m *MultiClient) DialWithConfig(remoteAddr string, config *DialConfig) (*ncp.Session, error) {
config, err := MergeDialConfig(m.config.SessionConfig, config)
if err != nil {
return nil, err
}

sessionID, err := RandomBytes(SessionIDSize)
if err != nil {
	return nil, err
}
sessionKey := sessionKey(remoteAddr, sessionID)
session, err := m.newSession(remoteAddr, sessionID, config.SessionConfig)
if err != nil {
	return nil, err
}

m.sessionLock.Lock()
m.sessions[sessionKey] = session
m.sessionLock.Unlock()

ctx := context.Background()
var cancel context.CancelFunc
if config.DialTimeout > 0 {
	ctx, cancel = context.WithTimeout(ctx, time.Duration(config.DialTimeout)*time.Millisecond)
	defer cancel()
}

err = session.Dial(ctx)
if err != nil {
	return nil, err
}

return session, nil

}
免费模式下:假如入口a 传入数据,出口有b、c、d 三个,想做到出口在bcd三个之间随机切换,只需要修改这段代码的remoteAddr(a中)的值就行了么

是的,可以选择和 b c d 中的一个 dial 建立 session 即可

谢谢大佬 :+1: