클라이언트가 하드웨어 시뮬레이션과 통신하고 기본 연결 유형을 시뮬레이션 할 수있는 서버를 개발 중입니다. 클라이언트가 처음 연결될 때 서버는 시뮬레이션 할 연결 유형을 알지 못합니다. 서버에 대한 클라이언트의 첫 번째 패킷은 특정 유형의 연결을 요청합니다.서버에서 여러 유형의 연결 처리
서버는 일반적으로 다른 유형의 연결을 어떻게 처리합니까? 나는 모든 연결이 동일한 서버에서만 작업했습니다. "알 수없는 연결"클래스와 다른 연결 유형을 시뮬레이트하는 두 개의 다른 연결 클래스를 구현하기 시작했습니다. 연결 유형이 결정되면 알 수없는 연결은 해당 유형의 연결을 만들고 연결을 레지스트리에 등록한 다음 소켓 핸들을 새 연결로 전달합니다.
하나의 연결이 상태 시스템을 구현하는 것이 더 일반적이며, 각 유형은 상태로 표시되며 유형별 상태를 처리 할 다른 상태 시스템을 포함합니다. 고려할 가치가있는 대안 디자인이 있습니까?
[업데이트]
codenheim에 의해 제안을 구현하기 시작한 후, 나는 내 특정 문제에 대한보다 적게보다는 매력적인 솔루션이 할 몇 가지 디자인 요소를 깨달았다. 가장 큰 문제는 연결 유형에 관계없이 연결을 통해 수행 할 수있는 작업을 수행하기 전에 하드웨어 주소를 수신하는 연결을 기다려야한다는 것입니다. 청취 포트를 사용하여 연결 유형을 결정하면 각 연결 유형에서 하드웨어 주소를 수신하기위한 논리를 반복해야합니다. 또한 모든 연결 유형에 대해이 상태의 연결 목록을 보관해야합니다. 하드웨어 주소를 기다리는 모든 것이 본질적으로 동일합니다.
각 연결 유형에 대한 고유 한 포트가 제 상황에서는 정상적으로 작동해야하며 소켓을 전달할 필요가 없습니다 (어쨌든 꽤 추함). 구성 파일을 약간만 변경하면됩니다. 클라이언트에게 연결 매개 변수를 보내려면 초기 패킷이 필요하지만 연결 유형을 아는 문제를 해결하고 디자인을 단순화합니다. 나는 포트 노킹 기술에 대해 어떻게 생각하는지 정확히 알지 못한다. –
이것을 구현하는 동안 몇 가지 문제가 발생하여 이에 따라 내 게시물을 업데이트하십시오. –
업데이트의 해결책은 모든 코드를 동일한 코드 기반으로 유지하는 것입니다. 필자는 다양한 장치 프로토콜을 지원하는 GPS 서버에서 이것을 사용했으며 각 프로토콜 처리기는 자체 포트가있는 클래스였으며 자체 스레드에서 실행 중이 었습니다. 그러나 공통 코드가 공유되었습니다. – codenheim