ioPushConnect function
HttpClient 기반 PushConnect — 실시간 푸시 신호(SSE) 연결.
스트림이 끝나면(정상 종료·끊김·ServerPushChannel.stop) 내부 클라이언트를 닫는다. 무음 상한을 두지 않는다 — 끊긴 연결의 탐지는 ServerPushChannel의 재연결 백오프가 맡고, 그 사이 갱신은 폴링이 덮는다.
Implementation
PushConnect ioPushConnect({Duration connectTimeout = const Duration(seconds: 10)}) {
return (String url) async {
final client = HttpClient()..connectionTimeout = connectTimeout;
final request = await client.getUrl(Uri.parse(url));
request.headers.set(HttpHeaders.acceptHeader, 'text/event-stream');
final response = await request.close();
Stream<String> body() async* {
try {
yield* response.transform(utf8.decoder);
} finally {
client.close(force: true);
}
}
return PushResponse(response.statusCode, body());
};
}