마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Android Socket Write&Read에 관해서 간단한 개념이요~

0 추천
read하는 부분의 쓰레드를 while(true)로 계속 돌려놓는게 맞는건가요?

그럼 polling이 일어나서 성능에 영향을 끼칠 것 같아서요..

Readbuffer에 읽을거리가 있을 때만 읽게하는 방법이 없나요???

어떤식으로 구현을 하는 것이 제대로된 방식인지 궁금합니다..

,

또 Write의 경우에는 while을 돌려놓는 것과 제가 쓰기 이벤트를 시행할때

AysncTask나 혹은 Thread를 다시 start하여 작동하는게 맞는건가요???

쓰기 이벤트를 발동할때 AysncTask나 Thread를 실행하는 방식은 뭔가 처리에 있어서 굉장히 느리게 반응을 할 것 같아서요.
treda (340 포인트) 님이 2016년 1월 25일 질문

2개의 답변

0 추천
 
채택된 답변
별도의 스레드를 만들어서 쓴다면 while 문에 read를 써도 괜찮습니다. read가 blocking 연산이기 때문에 특별히 성능 저하가 있지는 않습니다.

read가 음수를 리턴했을 때 while을 빠져나오는 코드만 확실하게 넣으면 됩니다.

그리고 이 경우에는 AsyncTask를 쓰지 마시고 직접 thread를 만들어 실행시키세요.
익명사용자 님이 2016년 1월 26일 답변
treda님이 2016년 1월 27일 채택됨
read로인한 blocking 상태는 리소스를 많이 소비하지 않는건가요???
그리고 혹시 write의 경우에도 while문을 돌려 놓는 것이 일반적인 케이스 인지 궁금합니다.
0 추천
read 하는데 while로 돌면서 read하는 것은 일반적인 경우라고 보시면 됩니다.
그리고 네트웍으로 I/O의 경우에는 별도 스레드(AsyncTask의 경우에는 스레드 풀)를 사용해야 하기 때문에 문제가 없습니다. 혹시 자바에서 스레드 풀링으로(ThreadPoolExecutor)을 사용해서 소켓처리를 해 보셨다면 동일한 구조이기 때문에 성능에서의 문제로 고민하실 필요는 없을 것 같습니다.

ReadBuffer와 같은 형태로 처리하는데는 일반적인 클라이언트의 코드가 아닌 Selector를 사용해서 소켓 이벤트를 처리하는 방법(이벤트 폴링)으로 처리하면 됩니다.
mcsong (44,040 포인트) 님이 2016년 1월 26일 답변
아 답변감사합니다!!
클라이언트는 오직 하나다인 경우에도 Selector가 필요 할까요???
...