Closed acidsound closed 5 years ago
rendezvous peer가 운용 중 종료되었다가 다시 실행할 경우는 정상적으로 연결이 유지가 됨. 최초 실행 시 node를 create할때 해당 rendezvous peer가 사용 가능한 상태여야함.
관측을 해보니 처음과는 달리 PeerInfo에 add로 multiaddr를 복수개 추가할 경우 첫번째 경우만 websocket 연결이 되고 그 이후는 무시하는 현상이 있음.
/ip4/0.0.0.0/tcp/(port)/.... 위와 같은 멀티 어드레스를 추가하는 경우에 포트가 중복되면 앞서 등록된 url로만 websocket 연결을합니다. ex) add("/ip4/1.2.3.4/tcp/9090/...."); add("/ip4/3.4.5.6/tcp/9090/...."); 인경우 1.2.3.4로만 websocket연결이 성공합니다.
add("/ip4/1.2.3.4/tcp/9090/...."); add("/ip4/3.4.5.6/tcp/10000/...."); 위와 같은 경우에는 둘 다 성공합니다.
맨 처음 제안되었던 상황을 요약하면
그러므로 만약 우선 등록한 쪽의 websocket이 문제가 없이 연결이 잘 되었다면, 두번째 등록한 ip의 문제는 발견할수 없을 것임.
코드의 문제가 아니라 설정의 문제로 확인이 되어서 이슈를 종료합니다.
websocket-star의 port문제를 다시 점검하던 중 동일 포트사용이 불가능하게 하는 코드를 확인하여 코멘트 합니다.
위치는 아래와 같습니다. https://github.com/libp2p/js-peer-info/blob/master/src/multiaddr-set.js#L102
multiaddr.toOptions() 시 아래와 같은 형태로 object가 나오는데 transport와 port로만 UniqBy를 합니다. {family: "ipv4", host: "xxx.xxx.xxx.xxx", transport: "tcp", port: "9090"}
node.start 시 err 가 발생하면 discovery가 안됨. PeerInfo 객체에 있는 websocket peer가 n개 이상일 경우 하나라도 접근이 불가능 할 경우 node.start의 callback으로 error를 반환하면서 discovery를 실행하지 않음.