2011-01-14 1 views
1

Java 서버와 C#, Javascript 및 Java로 작성된 여러 클라이언트간에 어떤 종류의 메시지를 교환하려면 어떤 "기술"을 제안 하시겠습니까?자바 서버 <-> C# + javascript + java + * 클라이언트


는 배경 이야기 : 우리의 현재 프로젝트에서

우리는 (서버에서 실행) 자바에서 일반 UI 백엔드를 구축을 위해 노력하고 다음 수단에 의해 몇 가지 UI 프론트 엔드에 "다리" 다른 UI 어댑터 (클라이언트, 서버 또는 둘 다에서 실행 중). 우리의 서버 기술은 항상 Java이지만 C# (Silverlight), JavaScript 및 Java 클라이언트가 있습니다. 어쩌면 더 많은 미래 (다른 스마트 폰, 태블릿).

UI 백엔드와 UI 프론트 엔드는 각각 클라이언트/서버에서 특정 속성/상태/데이터 변경을 캡슐화하는 다소 많거나 적은 간단한 메시지 (대부분 이름/값 쌍)를 통해 통신합니다. 단일 요청주기 내에서 이러한 간단한 메시지를 하나의 큰 메시지로 집계 한 다음 백엔드에서 프론트 엔드로 또는 그 반대로 전달합니다. 현재 메시지 송수신은 클라이언트와 서버의 단일 진입 점에서 수행됩니다. WebService 등으로 노출 된 서버 메소드가 없습니다. 간단히 말해서 우리의 경우 느려지므로.

우리의 현재 프로토 타입은 Java 서버, Java Desktop Client (Swing) 및 Java Web Client (Vaadin)로만 구성됩니다. 백엔드와 프론트 엔드간에 교환되는 메시지는 실제로 XML과 직렬화/비 직렬화 된 POJO (각각 특정 "변경"을 나타냄)의 목록입니다. 여태까지는 그런대로 잘됐다.

이제 C#과 자바 스크립트가 테이블에옵니다. 우리는 각 기술에서 어떤 종류의 객체로 작업하기를 원하기 때문에 어떤 종류의 추상적 인 언어로 메시지/변경/pojos를 지정하고 각 대상 언어에 대한 객체를 생성하는 것이 좋은 생각이라고 생각했습니다. 어떤 시점에서이 객체들은 직렬화/역 직렬화되어 유선을 통해 전송 될 수 있습니다 (아마도 http/s를 통해). 이를 위해 Google은 프로토콜 버퍼 또는 Thrift를 고려했습니다. 어떻게 생각해?

잠시 동안 우리의 동기식 요청 - 응답주기로 충분하지만 비동기 요청 - 응답 또는 서버 - 푸시가 필요합니다. 이것이 바로 ActiveMQ와 같은 것을 사용하려고 생각한 이유입니다. 어떻게 생각해? 너무 많은? 그렇지 않다면 위에서 언급 한 객체 생성 (xsd, jaxb,? for j)을 어떻게 수행 할 수 있습니까? 더 좋은 방법이 있습니까? 나는 ActiveMQ를 사용한 적이 없지만 웹 사이트에 따르면 Java, C# (Spring.NET) 및 Javascript (STOMP)와 함께 사용할 수 있어야합니다. 그러나 이것은 나에게 꽤 복잡해 보입니다 ...

이 주제 나 관련 주제에 대한 팁, 힌트, 경험 또는 의견은 정말 도움이 될 것입니다.

미리 감사드립니다.

답변

1

webservices를 사용하는 것이 좋습니다. WSDL 언어는 추상적 인 형태로 프로토콜의 객체와 메시지를 정의합니다. Java 및 C#과 같은 대부분의 현대 언어는 WSDL을 기본 유형으로 변환하고 I/O 처리를위한 라이브러리를 제공합니다.

+0

내가 말했듯이, 현재 서버/클라이언트에는 단일 진입 점이 있습니다. 기본적으로 POJO에 매핑되는 여러 메시지를 캡슐화하는 (HTTP) 요청이 들어옵니다. 필자는 웹 서비스 전문가는 아니지만, 필자가 이해할 수 있듯이 대상 언어로 객체를 생성하기 위해 WSDL을 얻으려면 webservice (각 변경/POJO에 하나)로 여러 메소드를 공개해야합니다. 아마 틀렸 겠지요.하지만 이것은 변경 사항 당 하나의 HTTP 요청으로 이어질 것이고, 이는 WS가 본질적으로 더 느릴 것입니다. 그리고 WSDL과 JavaScript는 어떻습니까? – Pauli

+0

그러나 WS를 디자인 할 수는 있습니다. 많은 세분화 된 요청을 할 필요는 없습니다. 몇 가지 복잡한 요청 일 수 있습니다. 그에 따라 서비스 입출력을 설계하십시오. –

0

저는 지난 2 년간 비슷한 시스템을 구축하는 데 관여했습니다. 우리 프로젝트의 백엔드는 C#, Java 및 다른 언어의 프론트 엔드이며, 프론트 엔드는 iOS, Android, Symbian 및 모든 일반 웹 브라우저 용 전화 클라이언트입니다. windows 데스크톱 애플 리케이션.

우리는 JSON을 모든 언어와 플랫폼에서 가장 널리 지원되는 형식으로 보이기 때문에 xml 기반 솔루션 (예 :webbrowsers/javascript) 매우 부족한 오버 헤드를 가지고 있기 때문에 대역폭이 부족한 클라이언트에게 매우 효과적입니다.

+0

JSON이 나에게 합리적으로 들립니다. 그래서 기본적으로 바이너리 JSON 인 Google의 protobuf를 생각했습니다. 그런데 어떻게 직렬화를 했습니까? 개체를 "수동으로"JSON에 직렬화 했습니까? 아니면 JSON 라이브러리를 통해 직렬화되는 각 메시지 및 대상 언어에 대해 개체를 생성 했습니까? 그리고 어떻게 의사 소통을 했습니까? 간단한 HTTP? – Pauli

+0

C#/mvc의 경우 모델 및 DataContractJsonSerializer를 사용합니다. 자바 스크립트의 경우 JSON 객체에 대한 네이티브 지원이없는 ie7과 같은 브라우저의 드롭 인 json2 라이브러리를 사용합니다. 객체 초기화는 객체의 초기화가 느려지 기 때문에 순수한 json입니다. 우리가 처리하는 데이터. 2 년 전에 프로젝트를 시작했을 때 필요한 도구 중 일부가 출시되지 않았기 때문에 설치의 자바 스크립트 부분은 실제로 매우 길고 복잡한 이야기이기 때문에 우리의 성능 요구 때문에 자체 개발 솔루션이 상당수 있습니다. . –

+0

나머지 언어들에 대해서는 모르겠다. tbh 나는 프로젝트의 그 부분을 결코 만진 적이 없다. –

관련 문제