2011-08-27 4 views
4

현재 자바 프로젝트를 네트워킹과 관련없는 이유로 사용하고 있습니다. 현재 나는 C++과 UDP 위에 구축 된 커스텀 프로토콜을 사용하고 있습니다. 내 문제는 여기에 추가 된 효율성이 많은 양의 실시간 데이터를 전송하는 데는 좋지만 로그인과 같은 순수한 "논리 동작"을 위해 RPC 라인을 따라 뭔가를 갖고 싶습니다. 표준 C++ 자체에는 직렬화에 대한 개념이 없으므로 C++의 RPC는 어렵습니다.Java에서 UDP와 RPC를 결합하는 가장 쉽고 효율적인 방법은 무엇입니까?

또 다른 대답으로, RPC와 비슷한 것으로 보이는 Java의 RMI가 발견되었지만 이것이 얼마나 효율적인지/응답인지, 또는 기존의 UDP 소켓에 연결될 수 있는지 여부를 찾을 수 없었습니다. 내 서버 프로그램에서 두 개의 포트를 열려고합니다. 나는 자바 직렬화가 있다고 생각하기 때문에

또는, 나는 자바는 개체의 임의의 스트림을 역 직렬화하는 방법을 간단에 따라 자신을 RPC의를 구현할 수 있습니다. 그래도 이것이 자바의 내장 함수를 배우는 데 며칠을 소비해야한다면, 이것은 나를위한 선택 사항이 아닙니다. 그것은 원격 심각한 프로젝트가 있다면

+0

이것은 내 호기심 이외에는 아무런 문제가되지 않지만 사용자 정의 UDP 프로토콜은 무엇을 사용하고 있습니까? 직접 롤백 했습니까? 아니면 UDT (udt.sourceforge.net)와 같은 것을 사용하고 있습니까? –

+0

이것은 UDP 위에 구축 된 자체 프로토콜입니다. 정확성을 위해 메시지 무결성을 보장하고 누락 된 패키지를 다시 요청하며 메시지 처리기가 선택적으로 런타임에 패키지 순서를 강제 적용 할 수 있도록 몇 가지 TCP 기능을 추가합니다. 게임을 위해 특별히 제작되었습니다. UDT가 다른 영역을 전문적으로 다루는 한, C#의 lidgren 라이브러리는 내가 구르는 것과 비슷합니다. – cib

+0

꽤 흥미 롭습니다. 감사. –

답변

2

RPC에 관심이 있으시면 언제나 XML-RPCJSON-RPC이 있으며 둘 다 무료/오픈 소스 C++ 구현이 있습니다. 불행히도, 내 개발의 대부분은 Java로 진행되어서 얼마나 유용하고 효과적인 지에 대해 말할 수는 없지만, C++로 이미 약간의 작업을하고 편안하게 작업 한 것처럼 들릴지도 모릅니다. . 또한 Java 구현이 있으므로 XML-RPC 또는 JSON-RPC를 사용하여 Java 및 C++ 응용 프로그램을 모두 지원할 수도 있습니다.

유일한 단점은 HTTP 연결을 사용하는 대부분의 것 같습니다. 당신이하고 싶은 일 중 하나는 기존 연결을 재사용하는 것입니다. 이제 모든 구현을 살펴 보지 않았지만 내가 본 두 가지 요구 사항을 충족하지 못할 수도 있습니다. 최악의 경우는 아마도 아이디어를 얻을 수 있다는 것입니다. 가장 좋은 경우에는 다른 곳에서 구현해야 할 부분이있을 수도 있고 필요한 부분을 찾을 수있는 출발점이 있습니다.

0

, 당신은 아마 Netty 살펴 보셔야합니다.

그것은 네트워크 시스템을 개발하기위한 좋은 도서관이 입증 된 제품 사용을 많이 가지고 있으며, TCP 나 UDP 클라이언트 - 서버 통신 같은 것들에 적합합니다. 당신이 정말로 그들도 좋은 예와 문서를 보너스로 :-)

로하지 않는 한 나는이 바퀴를 개혁하지 것이다.

+0

라이브러리가 재미있어 보이지만 RPC에 대한 언급이 없습니다. 게다가, 나는 단지 2 개의 "인코딩", 즉 바이너리와 직렬화 된 객체만을 원한다. 그래서 디코딩/인코딩을위한 완벽한 파이프 라인은 나에게 과잉 보인다. – cib

1

전송 계층으로 UDP의 사용을 배제하지 않는 추상화 등의 RPC의 사용은 : RMI는 일반적으로 후드 (나는 보았다 마지막 시간)에서 TCP를 사용되는 RPC 추상화입니다.

난 그냥 당신의 UDP 프로토콜을 얘기 자바 층을 코딩 좋을 것 : 당신이 그것을 할 많은 라이브러리 중 하나를 사용할 수 있습니다 당신은 기존의 모든 작업을 폐기 할 필요가 없습니다. 프로토콜을 RPC 레이어로 감싸고 싶지 않은 이유는 무엇입니까? login 메서드를 만들어 로그인 UDP 패킷을 보내고 적절한 응답을받은 다음 반환합니다.

+0

좋은 생각처럼 들리지만 Java에 대한 경험이 없다면 올바른 설명서/라이브러리를 찾을 수없는 것 같습니다. 더 자세한 정보를 원할시겠습니까? – cib

관련 문제