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

안드로이드와 라떼판다(윈도우)의 소켓통신에 대해 질문드리겠습니다.

0 추천
안녕하세요

현재 졸업작품을 진행하고있는 대학생입니다.

자전거에 자이로센서가 연결된 라떼판다(윈도우가 탑재된 미니pc입니다)에 를 장착하고 사용자가 넘어지면 안드로이드에 알림이 가게 하는 프로젝트를 만들고 있는데요

현재 제가 구현한 코드를 말씀드리자면 안드로이드에서는 소켓을 만들어두어 대기하고있다가 라떼판다에서 넘어짐을 감지하면 accept()를 실행해 서로 연결되고 이후 안드로이드에서 close()를 해서 소켓의 연결을 끊습니다.

그러니깐 넘어짐이 감지되면 소켓이 연결되고 적절한 처리를 한 후에 종료되는 그런 코드입니다.

중간에 인터넷이 끊길수도 있으니깐 필요할때만 연결하는게 낫지 않을까? 라는 생각으로  코딩했지만 지금 생각해보니 굳이 이럴 필요가 있나? 란 생각이 들더라구요

 

선생님들 같은 경우에는 계속 연결시켜둔다 vs 필요할때만 연결한다 중에 어떤걸 선택하실건가요?

 

아니면 아예 넘어졌을때 안드로이드로 보내는게 아니라 서버에 저장하고 안드로이드에서 서버의 값을 확인하게 하는방식이 나을까요?

 

즐거운 추석 보내세요
isoleth (260 포인트) 님이 2021년 9월 16일 질문

2개의 답변

0 추천
 
채택된 답변
커넥션을 맺는 작업을 expensive 한 쪽에 속합니다. 이런 경우는 Connection Pool 같은 걸 두고 재사용을 하게 하는 방법을 생각해 볼 수 있습니다. 만약 이게 처리가 복잡하면 커넥션이 한 두개만 존재할 경우, 계속 열어두는 게 더 효율적이라 생각합니다. 어떤식으로 하던 데이터 처리 전에 커넥션을 검사해서 종료가 된 상태라면, 다시 연결을 해야 겠죠. (Socket.io같은 걸 사용해도 되겠죠.)

그리고 연결을 끊었다 연결했다 하는  stateless를 구현할 경우는 서버쪽에 http server를 탑재해서 처리할 수도 있지 않을까 생각합니다. 이게 가능한 옵션이면 굳이 소켙 구현보다는  retrofit + Rxjava 또는 Retrofit + coroutine등을 통해 처리할 수도 있을 겁니다.

결론적으로는 서너가지 옵션을 두고 테스트를 좀 해보시고, 서로 비교를 해보세요. 어떤 것은 구현을 쉬운데, 효율성이 떨어질 수도 있고, 다른 건 퍼포먼스는 잘 나오는데, 구현이 어렵다거나 하는 등의 장단점 같은 게 있을 겁니다. 그리고 가장 우선순위에 무엇을 두느냐가 중요할 겁니다. 이걸 종합적으로 비교해서 제일 적은 비용이 들어가는 방법을 선택하면 어떨까 싶습니다.
spark (227,510 포인트) 님이 2021년 9월 16일 답변
isoleth님이 2021년 9월 16일 채택됨
+1 추천
이건 지금 개발하고 있는 형태에 대한 고민도 필요할 것 같네요.

자전거를 타고 있는데, 안드로이드에서 띄운 서버 소켓에 자이로센서가 있는 PC에서 접속할 수 있나요? 이런 경우에는 bluetooth로 해야하지 않을까요?

그리고, 서버 소켓에 연결이 되어 있다고 해도, 실제로 패킷을 던저보지 않은 경우에 끊어진 경우를 정확하게 캐치하지 못할 가능성이 매우 큽니다.

자전거를 타는데, 소켓으로 연결을 할 수 있다라고 하는 가정이 매우 위험해 보입니다. 개인적으로는 조금 더 고민이 필요하지 않나 싶습니다.

그리고, 보통은 클라이언트에 연결을 종료하는 로직을 두는게 좋을 것 같습니다.
mcsong (44,040 포인트) 님이 2021년 9월 17일 답변
...