2015-04-30 2 views
2

фона:Javascript для интерфейса Java Remote Method

Некоторого времени назад я работал над приложением клиента-сервера Java (здание автоматизация была сфера). После первой попытки, когда мы написали как сервер, так и клиент в java и связали их через java RMI (Remote Method Interface), мы обнаружили, что писать клиент в Javascript было бы лучше по нескольким причинам (я не буду их здесь приводить , не имеет значения).

Поскольку RMI не работает между Javascript и Java, мы затем использовали WebSockets для их соединения и получения почти реального времени соединения. Это было около 3 лет назад, websockets все еще находились в ранней бета-версии с абсолютно никакой документацией и многими «еще не реализованными» функциями. Для части протокула я написал что-то вроде собственного RMI на основе JSON. Я десериализовал объекты JSON, исходящие от клиента, и запросил мое собственное серверное приложение с помощью java.lang.reflection, чтобы получить методы, которые клиент хотел выполнить.

Все, что сработало хорошо, у меня было довольно общее, поэтому я мог динамически вставлять другие подклассы во время выполнения, и мой RMI все равно сможет получить к ним доступ.

TL; DR:

Я всегда задавался вопросом, есть ли стандартный способ подключения Java с JavaScript в чем-то, как RMI (например, того, чтобы расширить некоторый интерфейс и будучи тогда в состоянии получить доступ к этим методам интерфейса с javascript) Я не могу быть первым, у кого есть эта проблема.

К себе: Я инженер-электрик, поэтому Java, Javascript или веб-технологии в целом - это то, чему я научился в университете. Я знаю, о чем говорю, когда речь заходит о java, но я полный noob для javascript.

+0

Запись клиента в JavaScript? Это чистый JavaScript? Или веб-интерфейс? –

+0

SOAP приходит мне на ум, см. Http://stackoverflow.com/questions/124269/simplest-soap-example –

+0

@Evan Knowles Я думаю, мы использовали JavaScript с Ajax. Я не знаю, отвечает ли это на ваш вопрос, поскольку я не написал этого клиента. – jwsc

ответ

1

Для достижения асинхронной связи между клиентом & сервером есть некоторые из доступных инфраструктур как Atmosphere, Spring Reactor, DWF, Spring websockets.

Основного подхода эти структуры имеют на сторону клиента расслоения плотного файл, который действует в качестве заглушки к серверу боковые методы. Фреймворки не позволяют закрыть цикл запроса запроса от браузера. Они продолжают периодически отправлять пустые сообщения, чтобы поддерживать открытое соединение. & синхронизировать данные.

Есть также некоторые патентованный API, доступных на рынке, чтобы достичь этого, как Pusher

+0

Возможно, я что-то упустил, но думаю, что эти асинхронные среды связи делают то же самое, что и я использую websocket lib. Они «рассылают сообщения» явно. Если я хочу, чтобы методы выполнялись из-за этих сообщений, я должен написать это самостоятельно. Это правильно? Для пояснения: на низком уровне RMI также «отправляет сообщения». Но над ним построены более высокие уровни, которые выполняют функции или методы, указанные в сообщении RMI. Есть ли более высокий уровень Framework, который будет делать это для меня? – jwsc

+0

Получение сообщений websocket из браузера точно так же, как работа с кодом ajax, вы можете написать методы на стороне сервера для обработки данных в объекте запроса. Также просмотрите очереди задач обмена сообщениями, которые асинхронно запускают запрос на стороне сервера на стороне сервера. Загляните в каркас атмосферы, он предоставляет функции, которые вам нужны – underdog

Смежные вопросы