TCP Channel (Blocking)
Last updated
Was this helpful?
Last updated
Was this helpful?
NIO์ tcp๋ blocking, non-blocking, asyncronized์ ์๋ก ๊ตฌํ๋ฐฉ์์ด ์ ํ ๋ค๋ฆ ๋๋ค.
ServerSocketChannel : buffer X blocking ๋ฐฉ์
SocketChannel : buffer O, blocking, non-blocking ๋ฐฉ์
ServerSocket์ ์์ฑํ ๋ค blocking์ผ๋ก ์ค์ ํด์ค๋๋ค.
ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ ์น์ธํ๊ธฐ ์ํ accept()๋ฅผ ์คํํฉ๋๋ค.
(InetSocketAddress) socketChannel.getRemoteAddress(); ๋ฅผ์ฌ์ฉํ๋ฉด ํด๋ผ์ด์ธํธ์ ์ ๋ณด๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์ฐ๊ฒฐ์ ์ข ๋ฃํ๊ณ ์ถ์ ๊ฒฝ์ฐ close๋ฅผ ์คํํด ์ค๋๋ค.
Socket์ ์์ฑํ ๋ค blocking์ผ๋ก ์ค์ ํด์ค๋๋ค.
์๋ฒ์ ์ฐ๊ฒฐ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ํด connet()๋ฅผ ์คํํฉ๋๋ค.
์ฐ๊ฒฐ ์ข ๋ฃ๋ close๋ฅผ ์คํํด ์ค๋๋ค.
Client์ ์ฐ๊ฒฐ ์์ฒญ์ด Server์์ ์๋ฝ๋์๋ค๋ฉด, read(), write()๋ฅผ ์ด์ฉํด ํต์ ํ ์ ์์ต๋๋ค.
๋ชจ๋ ๋ฒํผ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฒํผ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ตํํฉ๋๋ค.
๋ฐ์ดํฐ ์ ์ก์ write๋ฅผ ์ฌ์ฉํ์ฌ ์ ์กํ๋ค.
๋ฐ์ดํธ์ฝ๋๋ก ์ ์กํ๋ฉด๋๋ค.
์ ์ก๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ๊ฒ์ Read๋ฅผ ์ฌ์ฉํ๋ค.
๋ฐ์ดํธ ์ฝ๋๋ก ๋ค์ด์จ ๊ฐ์ ์ฝ์ผ๋ฉด ๋๋ค.
read๋ฅผ ํธ์ถํ ์์ ๋ถํฐ ์๋๋ฐฉ์ด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ฃผ๊ธฐ์ ๊น์ง๋ ํญ์ Blocking์ํ๊ฐ ๋๋๋ฐ,
๋ธ๋กํน์ด ํด์ ๋๊ณ ์๋ต์ด ์ค๋ ๊ฒฝ์ฐ๋ ์ธ๊ฐ์ง ์ ๋๋ค.
๋ฐ์ดํฐ ์ ์ก๋ฐ์
๋ฐ์ดํธ ์
์๋์ธก close()
-1
๋น์ ์์ ์ข ๋ฃ
IOException
๋๊ธฐ ๋ฐฉ์์ ์๋ฒ ์ฑ๋์ read๋ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ๋์ blocking๋๊ธฐ ๋๋ฌธ์ ์์ ์ด ๋๋๋ค.
์ด๋ฐ ๋ฌธ์ ๋๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ ์ค Tread pool์ ์ด์ฉํ์ฌ ํด๊ฒฐํ ์ ์๋ค.
executorService์ ์ค๋ ๋ํ ์ ํฌ๊ธฐ๋ฅผ ์ง์ ํด ์ค๋ค
Runnable์ ์คํํ ์์ ์ ์์ฑํ ๋ค, executorService์ ๋ฑ๋กํด์ค๋ค