Какую "технологию" вы бы предложили для обмена сообщениями между сервером Java и несколькими клиентами, написанными на C#, Javascript и Java?
Предыстория:
В нашем текущем проекте мы пытаемся создать общий интерфейс пользовательского интерфейса на Java (работающий на сервере), который затем «соединяется» с несколькими интерфейсами пользовательского интерфейса с помощью различных адаптеров пользовательского интерфейса (работает на клиенте, сервере или обоих) . Хотя нашей серверной технологией всегда будет Java, будут клиенты C# (Silverlight), JavaScript и Java. Возможно, в будущем будет еще больше (разные смартфоны, планшеты).
Серверная часть пользовательского интерфейса и интерфейсы пользовательского интерфейса взаимодействуют через набор более или менее простых сообщений (в основном пары имя/значение), каждое из которых инкапсулирует определенное изменение свойства/состояния/данных на клиенте или сервере соответственно. В течение одного цикла запроса несколько таких простых сообщений объединяются в одно большое сообщение, которое затем передается от бэкенда к интерфейсу или наоборот. На данный момент отправка и получение сообщений осуществляется через единую точку входа как на клиенте, так и на сервере. Таким образом, нет серверных методов, представленных как 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). Однако мне кажется, что это довольно сложно...
Любые советы, подсказки, опыт или комментарии по этой или смежным темам будут действительно полезны.
Заранее спасибо.