커넥션을 맺는 작업을 expensive 한 쪽에 속합니다. 이런 경우는 Connection Pool 같은 걸 두고 재사용을 하게 하는 방법을 생각해 볼 수 있습니다. 만약 이게 처리가 복잡하면 커넥션이 한 두개만 존재할 경우, 계속 열어두는 게 더 효율적이라 생각합니다. 어떤식으로 하던 데이터 처리 전에 커넥션을 검사해서 종료가 된 상태라면, 다시 연결을 해야 겠죠. (Socket.io같은 걸 사용해도 되겠죠.)
그리고 연결을 끊었다 연결했다 하는 stateless를 구현할 경우는 서버쪽에 http server를 탑재해서 처리할 수도 있지 않을까 생각합니다. 이게 가능한 옵션이면 굳이 소켙 구현보다는 retrofit + Rxjava 또는 Retrofit + coroutine등을 통해 처리할 수도 있을 겁니다.
결론적으로는 서너가지 옵션을 두고 테스트를 좀 해보시고, 서로 비교를 해보세요. 어떤 것은 구현을 쉬운데, 효율성이 떨어질 수도 있고, 다른 건 퍼포먼스는 잘 나오는데, 구현이 어렵다거나 하는 등의 장단점 같은 게 있을 겁니다. 그리고 가장 우선순위에 무엇을 두느냐가 중요할 겁니다. 이걸 종합적으로 비교해서 제일 적은 비용이 들어가는 방법을 선택하면 어떨까 싶습니다.