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 即可
谢谢大佬