Tôi đang triển khai thư viện Server-Sent Events bằng OkHttp. Sự kiện được gửi của máy chủ hoạt động bằng cách giữ kết nối HTTP mở với máy chủ mà trên đó các sự kiện có thể được phát lại cho máy khách. Kết nối sẽ chỉ đóng trên các lỗi hoặc nếu máy khách ngắt kết nối rõ ràng.Truyền trực tiếp nội dung phản hồi okhttp
Cách tốt nhất để đạt được hành vi phát trực tuyến này bằng cách sử dụng OkHttp là gì? Tôi đã cố gắng để làm một cái gì đó như:
response.body().source().readAll(new Sink() {
@Override
public void write(Buffer source, long byteCount) throws IOException {
Log.d(TAG, "write(): byteCount = "+byteCount);
}
@Override
public void flush() throws IOException {
Log.d(TAG, "flush()");
}
@Override
public Timeout timeout() {
return Timeout.NONE;
}
@Override
public void close() throws IOException {
Log.d(TAG, "close()");
}
});
Với phương pháp này, tôi cuối cùng sẽ thấy thông báo đăng nhập write()
, nhưng đôi khi nó có thể mất nhiều thời gian (phút). Điều đó làm cho tôi nghĩ rằng có thể có một số đệm đang xảy ra dưới mui xe và tôi không nhận được dữ liệu của tôi cho đến khi bộ đệm được đỏ bừng.
Tôi đã sử dụng curl
để xác minh máy chủ hoạt động chính xác. Dữ liệu là được gửi đúng giờ, tôi không nhận được cuộc gọi lại khi đến.
Trải nghiệm của tôi với OkHttp
và Okio
rất hạn chế, vì vậy rất có thể tôi đã làm hỏng điều gì đó hoặc đã quên đặt một số tùy chọn. Bất kỳ trợ giúp nào cũng được đánh giá rất cao! :)
Thư viện này có sẵn ở đâu đó không? :) – wblaschko