java сервер <-> c # + javascript + java + * клиенты - PullRequest
1 голос
/ 15 января 2011

Какую «технологию» вы бы предложили для обмена сообщениями между сервером Java и несколькими клиентами, написанными на C #, Javascript и Java?


История вопроса:

В нашем текущем проекте мы пытаемся создать универсальный бэкэнд пользовательского интерфейса на Java (работающий на сервере), который затем «соединяется» с несколькими интерфейсами пользовательского интерфейса с помощью различных адаптеров пользовательского интерфейса (работающих на клиенте,сервер или оба).В то время как наша серверная технология всегда будет Java, будут C # (Silverlight), JavaScript и Java-клиенты.Может быть, даже больше в будущем (разные смартфоны, планшеты).

Внутренний интерфейс UI и внешние интерфейсы пользовательского интерфейса обмениваются данными через несколько более или менее простых сообщений (в основном пар имя / значение), каждое из которых инкапсулирует конкретное изменение свойства / состояния / данных на клиенте или сервере соответственно.В течение одного цикла запросов несколько таких простых сообщений объединяются в одно большое сообщение, которое затем передается из внутреннего интерфейса во внешний интерфейс или наоборот.На данный момент отправка и получение сообщений осуществляется в одной точке входа как на клиенте, так и на сервере.Таким образом, нет никаких серверных методов, представленных как WebService и т. Д. - просто потому, что в нашем случае это будет определенно медленным.

Наш текущий прототип состоит исключительно из сервера Java, клиента рабочего стола Java (Swing) иJava веб-клиент (Vaadin).Сообщение, которым обмениваются бэкэнд и внешний интерфейс, фактически представляет собой список POJO (каждый из которых представляет определенное «изменение»), сериализованный / десериализованный в / из XML.Пока все хорошо.

Теперь C # и Javascript выходят на стол.Поскольку мы хотим работать с какими-то объектами в каждой технологии, мы подумали, что было бы неплохо указать сообщения / изменения / pojos на каком-то абстрактном языке, а затем сгенерировать объекты для каждого целевого языка.В какой-то момент эти объекты могут быть сериализованы / десериализованы и отправлены по проводам (возможно, через http / s).Для этого мы подумали о буферах протокола Google или Thrift.Как вы думаете?

На данный момент нашего синхронного цикла запрос-ответ достаточно, но нам вскоре понадобятся асинхронный запрос-ответ или запрос сервера соответственно.Вот почему мы сразу решили использовать что-то вроде ActiveMQ.Как вы думаете?Перебор?Если нет, как мы можем выполнить генерацию объекта, упомянутую выше (xsd, jaxb,? Для js)?Есть ли лучшие способы?Я никогда не использовал ActiveMQ, но согласно веб-сайту это должно быть возможно с Java, C # (Spring.NET) и каким-то образом с Javascript (STOMP).Тем не менее, это кажется мне довольно сложным ...

Любые советы, советы, впечатления или комментарии по этой или смежным темам были бы очень полезны.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 15 января 2011

Я бы порекомендовал использовать веб-сервисы.Язык WSDL определяет объекты и сообщения вашего протокола в абстрактной форме.Большинство современных языков, таких как Java и C #, имеют инструменты для преобразования WSDL в нативные типы и библиотеки для обработки ввода / вывода.

0 голосов
/ 15 января 2011

Последние два года я участвовал в создании аналогичной системы: бэкэнд для нашего проекта - c #, java и множество других языков, frontend - это телефонные клиенты для ios, android, symbian, всех распространенных веб-браузеров и даже окон.настольные приложения.

Для всех этих сервисов мы используем JSON, поскольку этот формат, как представляется, наиболее широко поддерживается на всех языках и платформах, он довольно быстро декодируется на клиентах по сравнению с решением на основе xml (особенно webbrowsers / javascript) и имеет довольно низкие накладные расходы, которые очень хорошо сжимаются, что отлично подходит для клиентов, которым не хватает пропускной способности.

...