当主机在go-libp2p中获取流时,我怎么知道主机是在服务器端还是客户端?

时间:2019-11-29 15:01:42

标签: go-libp2p

我认为流的基础连接应该有方向, 那么当主机在go-libp2p中获取流时,我怎么知道主机是在服务器端还是客户端?

例如,我想知道如何根据流处理程序函数中流的基础传输连接来获取主机位于服务器端或客户端的信息。


func main() {
    golog.SetAllLoggers(gologging.INFO) // Change to DEBUG for extra info

    listenF := flag.Int("l", 0, "wait for incoming connections")
    target := flag.String("d", "", "target peer to dial")
    insecure := flag.Bool("insecure", false, "use an unencrypted connection")
    seed := flag.Int64("seed", 0, "set random seed for id generation")
    flag.Parse()

    if *listenF == 0 {
        log.Fatal("Please provide a port to bind on with -l")
    }

    // Make a host that listens on the given multiaddress
    ha, err := makeBasicHost(*listenF, *insecure, *seed)
    if err != nil {
        log.Fatal(err)
    }

    // Set a stream handler on host A. /echo/1.0.0 is
    // a user-defined protocol name.
    ha.SetStreamHandler("/echo/1.0.0", func(s network.Stream) {
        log.Println("Got a new stream!")
        if err := doEcho(s); err != nil {
            log.Println(err)
            s.Reset()
        } else {
            s.Close()
        }
    })
}

1 个答案:

答案 0 :(得分:1)

在go-libp2p中,每个流都引用了它所属的tranport连接, 传输连接具有stat属性。 因此您可以在下面获取类似的信息, 如果连接的状态为DirInbound,则主机位于服务器端, 如果连接的状态为DirOutbound,则主机位于客户端。

export default class DemoApp extends React.Component {

  calendarRef = React.createRef()

  render() {
    return (
      <FullCalendar ref={this.calendarRef} />
    )
  }

  someMethod() {
    let calendarApi = this.calendarRef.current.getApi()
    calendarApi.getEvents()
  }

}
相关问题