rust turnclient
A release to attach some pre-builts
UDP용 Simple Rust TURN(RFC 5766) 클라이언트 - 엄격한 NAT도 통과합니다. 현재는 비동기만 가능
<bonus>
범용 TURN 클라이언트/프록시로, 사용자 정의 작업에 TURN을 사용할 수 있습니다(시그널링을 위한 스크립트 제공). Github 릴리스에는 사전 빌드된 실행 파일이 있습니다. </bonus>
.
정리된 에코 예시 스니펫:
let udp : tokio :: net :: UdpSocket ;
let c = turnclient :: TurnClientBuilder :: new ( turn_server , username , password ) ;
let ( turnsink , turnstream ) = c . build_and_send_request ( udp ) . split ( ) ;
turnstream . map ( move |event| {
Ok ( match event {
MessageFromTurnServer :: AllocationGranted { relay_address , .. } => {
MessageToTurnServer :: AddPermission ( peer_addr , ChannelUsage :: WithChannel )
} ,
MessageFromTurnServer :: RecvFrom ( sa , data ) => {
MessageToTurnServer :: SendTo ( sa , data )
} ,
_ => MessageToTurnServer :: Noop ,
} )
} ) . forward ( turnsink ) . await ;
자세한 지침은 상자 수준 문서를 참조하세요.
구현되지 않음 / TODO / 단점:
Box<dyn std::error::Error>
입니다.Vec<u8>
사용합니다.예:
echo.rs
- 지정된 TURN 서버에 연결하고, 지정된 피어에 권한을 부여하고 이에 대한 에코 서버 역할을 합니다(위에 설명된 스니펫).proxy.rs
- 로컬 UDP 피어와 TURN 중재 피어 간에 패킷을 교환합니다. 할당이 가능해지면 스크립트를 실행합니다. 오래된 Rust와 Tokio 0.1
위한 오래된 0.1.0
버전의 크레이트가 있습니다. 현재 버전보다 성능이 더 좋을 수도 있고 나쁠 수도 있지만 아직 실제로 확인하지는 않았습니다.