나는 내 클라이언트 서버 환경에서 사용하기 위해 명령 프로토콜을 적용하는 것에 대해 몇 가지 질문을 해왔다. 그러나 몇 가지 실험을 마친 후에는 저에게 효과가 없다고 결론을 내 렸습니다. 이 시나리오에서는 설계되지 않았습니다. 나는 이렇게 느슨한 끝에있다.자바 소켓 RPC 프로토콜
RPC 메커니즘을 구현하기 전에 "Operation"이라는 클래스가있었습니다. 또한 서버에서 호출 할 수있는 작업의 이름이 들어있는 "Action"이라는 제목의 열거 형을 사용했습니다.
이제 내 이전 프로젝트에서 클라이언트가 서버에서 작업을 호출하려고 할 때마다 '작업'인스턴스를 만들고 "동작"열거 형의 값으로 작업 변수를 설정했습니다. 서버 측에 Operation serverOpToInvoke = new Operation();
serverOpToInvoke.setAction(Action.CREATE_TIME_TABLE);
serverOpToInvoke.setParameters(Map params);
ServerReply reply = NetworkManager.sendOperation(serverOpToInvoke);
...
예를
를 들어, 나는 '경우는/다른 진술의 부하와 함께'액션 '열거 값을 검사하여 호출하는 방법을 결정하는 끔찍한 작업을 수행했다. 일치가 발견되면 적절한 방법을 호출합니다.이 문제는 지저분하고 유지하기가 어려웠으며 궁극적으로 나쁜 디자인이었습니다.
내 질문은 - 내가 자바에서 TCP 소켓을 통해 멋지고 깨끗하고 유지 보수가 잘되는 RPC 메커니즘을 구현할 수있는 패턴이 있습니까? 클라이언트 (안드로이드)가 RMI를 지원하지 않기 때문에 RMI는 나를 위해 아무런 의미가 없습니다. 나는이 단계에서 모든 길을 다 써 버렸다. 다른 옵션은 REST 서비스 일뿐입니다. 조언이 도움이 될 것입니다.
당신에게 감사
안녕하세요 biziclop, 리플렉션을 사용하여 명령을 실행하는 서버에 대해 언급 할 때 좀 더 자세히 설명해 주시겠습니까? 당신은 어제 나를 위해 명령 패턴에 대한 게시물에 답변을했고 그 이후로 나는 강력하고 사악한 동적 프록시를 읽었습니다. 나는 코드 감사를 위해 좋다. 나는 전반적인 개념에 더 관심이있다. 많은 도움을 주셔서 감사합니다 – Joeblackdev
@Joeblackdev 내 답변이 업데이트되었습니다. 도움이 되었기를 바랍니다. – biziclop
안녕하세요 biziclop - 그냥 명확히하기 : 서버에 상주하는 FooService 인터페이스 및 FooServiceImpl 구상 클래스의 컨텍스트에서. 위에서 요약 한 프록시에서 serviceObject는 어떻게 설정됩니까? 이것이 FooServiceImpl의 인스턴스입니까? 이 경우 클라이언트와 서버 모두에서 'FooServiceImpl'클래스가 필요합니다. 맞습니까? 귀하의 도움에 다시 한 번 많은 감사를드립니다. – Joeblackdev