ResponseBodyEmitter
ResponseBodyEmitter
๋ Spring MVC์์ ์ฌ์ฉ๋๋ ํด๋์ค๋ก, ๋น๋๊ธฐ ์์ฒญ ์ฒ๋ฆฌ์์ ํ๋ ์ด์์ ๊ฐ์ฒด๋ฅผ ์๋ต์ ์ธ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ด ํด๋์ค๋ ์ปจํธ๋กค๋ฌ ๋ฉ์๋์ ๋ฐํ ํ์
์ผ๋ก ์ฌ์ฉ๋๋ฉฐ, ๋จ์ผ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ DeferredResult
์๋ ๋ฌ๋ฆฌ ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๋ณด๋ผ ์ ์๊ฒ ํด์ฃผ๋๋ฐ, ๊ฐ ๊ฐ์ฒด๋ ํธํ๋๋ HttpMessageConverter
๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ฉ๋๋ค.
์ฃผ์ ๊ธฐ๋ฅ ๋ฐ ํน์ง
Asynchronous Processing:
ResponseBodyEmitter
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์คํธ๋ฆฌ๋ฐํ ์ ์์ผ๋ฉฐ, ํ ๋ฒ์ ์ ์ฒด ์๋ต์ ๋ณด๋ด๋ ๋์ ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์กฐ๊ฐ์ผ๋ก ๋ณด๋ผ ์ ์์ต๋๋ค.Multiple Sends: ์ฌ๋ฌ ๊ฐ์
send
ํธ์ถ์ ํตํด ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฐ์ดํฐ ์กฐ๊ฐ์ ๋ณด๋ผ ์ ์์ต๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ค์๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.Timeout Management: ์์ฑ์์ ํ์์์ ๊ฐ์ ์ค์ ํ์ฌ
ResponseBodyEmitter
์ ํ์์์์ ์ ์ดํ ์ ์์ต๋๋ค.Error Handling:
completeWithError
๋ฉ์๋๋ฅผ ํตํด ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋์ ์ฒ๋ฆฌ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค.Completion Callbacks:
onCompletion
,onTimeout
,onError
๋ฉ์๋๋ฅผ ํตํด ํด๋น ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ํธ์ถ๋ ์ฝ๋ฐฑ์ ๋ฑ๋กํ ์ ์์ต๋๋ค.
์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋์ค์ ์ธ์ ๋ ์ง emitter.send(foo)
๋ฅผ ํธ์ถํ์ฌ ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๊ณ , ๋ฐ์ดํฐ ์ ์ก์ด ๋๋๋ฉด emitter.complete()
๋ฅผ ํธ์ถํ์ฌ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํ ์ ์์ต๋๋ค.
์์
@RequestMapping(value="/stream", method=RequestMethod.GET)
public ResponseBodyEmitter handle() {
ResponseBodyEmitter emitter = new ResponseBodyEmitter();
// Pass the emitter to another component...
return emitter;
}
// in another thread
emitter.send(foo1);
// and again
emitter.send(foo2);
// and done
emitter.complete();
Last updated
Was this helpful?