스트림 이 페이지는 영어에서 번역되었습니다. 두 내용이 다를 경우 영어 페이지가 정확합니다. 영어 페이지 읽기
네 가지 작업이 결과를 서버 전송 이벤트로 스트리밍합니다. 어휘 생성, 튜터에게 메시지 보내기, 수업 계획 만들기, 그리고 수업 계획 따라가기입니다. 모든 라이브러리는 이벤트 스트림을 해당 언어 고유의 이터레이터로 바꾸고, 각 이벤트를 타입이 지정된 값으로 이미 디코딩해서 전달합니다.
스트림이 끝나는 방식
작업이 완료되었을 때. 반복은 스트림의 마지막 이벤트에서 저절로 멈춥니다. 수업 계획의 경우 마지막 이벤트에 결과가 담겨 있으므로, 루프가 끝나기 전에 결과를 받습니다.
API가 오류를 보고했을 때. 스트림 안에서 도착한 오류는 스트림 시작 전에 도착한 오류와 같은 타입인 API 오류로 발생합니다.
연결이 실패했을 때. 마지막 이벤트 전에 끝나거나 120초 동안 아무것도 보내지 않는 스트림은 전송 오류로 발생합니다.
직접 멈출 때. 사용하는 언어의 일반적인 방법으로 호출을 취소하거나 읽기를 멈추면, 연결이 즉시 닫힙니다.
keepalive 주석과 라이브러리가 아직 모르는 이벤트 타입은 건너뛰므로, 새로운 API 때문에 이전 라이브러리가 깨지는 일은 없습니다.
다시 재생하지 않음
이벤트를 하나라도 전달한 스트림은 라이브러리가 절대 재시도하지 않습니다. 반복하면 사용량을 두 번 소모할 수 있기 때문입니다. 수업 계획의 스트림이 시작된 뒤 끊겼다면, streamLessonPlan에 첫 이벤트의 plan_id를 넘겨 같은 계획을 이어서 따라가세요.
코드 예제 언어 TypeScript Rust Go Java Kotlin Ruby PHP TypeScript
const stream = client. generateVocabulary ({ level: 2 , source_lang: "en" , target_lang: "zh" , count: 8 });
for await ( const ev of stream) {
if (ev.event === "item" ) console. log (ev.data.word, ev.data.translation);
} Rust
use lingara :: models :: { GenerateVocabularyEvent , VocabRequest };
use std :: num :: NonZeroU8 ;
let request = VocabRequest { level : 2 , source_lang : "en" . into (), target_lang : "zh" . into (), count : NonZeroU8 :: new ( 8 ) };
let mut stream = client . generate_vocabulary ( & request) .await? ;
while let Some (event) = stream . next () .await {
if let GenerateVocabularyEvent :: Item (item) = event ? {
println! ( "{} {}" , item . word, item . translation);
}
} Go
count := uint8 ( 8 )
s, err := client. GenerateVocabulary (ctx, lingara . VocabRequest {Level: 2 , SourceLang: "en" , TargetLang: "zh" , Count: & count})
if err != nil {
return err
}
defer s. Close ()
for ev, err := range s. Events () {
if err != nil {
return err
}
if item, ok := ev.( lingara . GenerateVocabularyEventItem ); ok {
fmt. Println (item.Data.Word, item.Data.Translation)
}
} Java
import com.getlingara.client.model.GenerateVocabularyEvent;
import com.getlingara.client.model.VocabRequest;
VocabRequest request = new VocabRequest (). level ( 2 ). sourceLang ( "en" ). targetLang ( "zh" ). count ( 8 );
try (EventStream< GenerateVocabularyEvent > stream = client. generateVocabulary (request)) {
for (GenerateVocabularyEvent event : stream) {
if (event instanceof GenerateVocabularyEvent.Item item) {
System.out. println (item. data (). getWord () + " " + item. data (). getTranslation ());
}
}
} Kotlin
import com.getlingara.kotlin.LingaraClient
import com.getlingara.kotlin.model.GenerateVocabularyEvent
import com.getlingara.kotlin.model.VocabRequest
val request = VocabRequest (level = 2 , sourceLang = "en" , targetLang = "zh" , count = 8 )
// The request is sent here; collect the stream once, inside use {}.
client. generateVocabulary (request). use { stream ->
stream. collect { event ->
when (event) {
is GenerateVocabularyEvent.Item -> println ( "${event. data .word} ${event. data .translation}" )
is GenerateVocabularyEvent.Started -> Unit
}
}
} Ruby
client. generate_vocabulary ( level: 2 , source_lang: "en" , target_lang: "zh" , count: 8 ) do |event|
case event
in Lingara :: GenerateVocabularyEventItem => item then puts " #{item. data . word } : #{item. data . translation } "
else nil
end
end PHP
use Lingara\Model\VocabRequest ;
use Lingara\Stream\GenerateVocabularyEvent ;
$request = new VocabRequest ([ 'level' => 2 , 'source_lang' => 'en' , 'target_lang' => 'zh' , 'count' => 8 ]);
foreach ($client -> generateVocabulary ($request) as $event) {
if ($event instanceof GenerateVocabularyEvent\Item ) {
echo $event -> data -> getWord (), ': ' , $event -> data -> getTranslation (), " \n " ;
}
}