[Flutter] Stream

김영진·2022년 8월 23일
0

목적

flutter bloc + rxDart 를 사용하고 있는데, rxDart의 이해 전에 dart의 Stream Class의 이해를 위해 이 포스트를 남긴다.


내용

Stream class

비동기 데이터 이벤트의 원천이다.

하나의 스트림은 일련의 이벤트들을 받는 방법을 제공한다. 각각의 이벤트는 스트림의 element 라고도 하는 데이터 이벤트 OR 무언가가 실패했다는 알림인 오류 이벤트 입니다
=> 스트림 == [이벤트,이벤트,이벤트,이벤트]
=> 이벤트 == 데이터 이벤트 || 오류 이벤트

스트림이 모든 이벤트를 emit 하였을때 하나의 "done" 이벤트는 수신자에게 종료에 도달햇음을 알립니다.

스트림에서 이벤트를 발생시키는것을 시작하게하고 이벤트를 받는 리스너를 설정한다. 리슨할때, 너는 StreamSubscription 객체를 받는다. 이 객체는 event를 제공하는 active 객체이고, 이것은 다시 listening 하는것을 멈출 수 있고, 일시적으로 스트림으로 부터 이벤트들을 멈출 수 있다.

스트림의 종류에는 Single-Subscription Broadcast 스트림이 있다.

SingleSubscription은 스트림의 라이프타임동안 하나의 리스너를 허락한다. 이것은 리스너를 가질때까지 이벤트를 생성을 시작하지 않는다. 그리고 이것은 리스너가 구독취소 되었을때 이벤트를 보내는것을 멈춘다. 비록 이벤트가 남아있을지라도.

SingleSubscription을 두개 리슨하는것은 불가능하고, 첫번째 구독이 취소되어도 불가능하다.

SingleSubscription 스트림들은 일반적으로 파일I/O와 같은 큰 연속 데이터의 스트리밍 청크에 사용된다.

Broadcast 스트림은 몇개의 리스너를 허락한다. 그리고 Broadcast는 리스너가 있든 없는 준비가 되었을때 이벤트를 발생시킨다.

Broadcase 스트림들은 독립적인 event/observers 를 위해 사용됩니다.

만약 여러 리스너가들이 SingleSubscription 스트림을 구독하기를 원한다면,asBroadcastStream을 사용해서 non-broadcast스트림의 위에 broadcast 스트림을 만들어라

두 스트림중 하나에서 where 그리고 skip과 같은 스트림 변환은 명시되지 않는 한 메서드가 호출한 스트림과 동일한 유형의 스트림을 반환합니다.

이벤트가 발생하면 리스너가 이벤트를 수신합니다. 이벤트를 발생시키는 동안 리스너가 브로드캐스트 스트림에 추가되면 해당 리스너는 현재 발생 중인 이벤트를 수신하지 않습니다. 리스너가 취소되면 이벤트 수신이 즉시 중지됩니다. broadcast 스트림에서 리슨은 리슨 호출이 발생할 때 아직 전송되지 않은 이벤트만 포함하는 새로운 스트림에서 리슨하는것으로 간주될 수 있다. 예를들어 첫번째 getter는 스트림을 수신한 다음 다음 리스너가 리슨하는 첫번째 이벤트를 반환합니다. 이것은 반드시 stream이 내보내는 첫번째가 아니라 broadcast 스트림의 남은 이벤트들 중 첫번째니다.
=> 이벤트가 이미 발생하고 있는데 브로드캐스트 스트림에 추가되었다고 해서 현재 발생중인 이벤트를 리슨하는게 아니라 아직 전송하지 않은 가장 첫번째 이벤트를 리슨함.

'완료' 이벤트가 실행되면 구독자는 이벤트를 받기 전에 구독이 취소된다. 이벤트가 전송된 후에는 스트림에 구독자가 없습니다. 이 시점 이후 새 구독자를 방송 스트림에 추가하는것은 허용되지만 그들은 가능한 빨리 새로운 완료 이벤트를 받을것이다.

결론

스트림에는 2종류가 있고
각각의 특징을 알수있었음

profile
2021.05.03) Flutter, BlockChain, Sports, StartUp

0개의 댓글