У меня есть приложение JRuby/Rails, которое должно получать данные из системы, написанной на Java. Я уже разработал, как вызвать Java-код из Ruby.
Однако скажем, что объект Client, который мне нужно создать, запускает потоки, общается с внутренней системой и т.д., И что данные передаются асинхронно в обратных вызовах.
Должен ли я писать отдельный веб-сервис (который создает этот клиент) с постоянным подключением к системе Java? Таким образом, мой код Ruby/Rails может вызывать его синхронно. Или можно написать этот обработчик asynch непосредственно в Rails?
Когда несколько HTTP-клиентов выдают свои GET, я, конечно, должен подключиться к системе Java, когда придет первый клиент. Для следующих клиентов данные уже будут там.
Я понимаю, каково будет правильное решение, но мне любопытно, могу ли я все это сделать в Rails.
Я могу (пока) жить без обновления в реальном времени веб-страницы, пока данные в обратных вызовах Java хранятся "где-то", так что следующий HTTP refresh/GET может вернуть его. Шаг гнезда будет SSE, Javascript и т.д.
Я думаю, что я знаю, как создать веб-сервис Java, но я предпочел бы, чтобы решение было немного проще с меньшим количеством сервисов.
благодаря
Поскольку у вас также есть доступ к java-коду, у меня есть два подхода к расширению бэкэнда Java, чтобы предоставить данные, которые вы хотите использовать в своем приложении для рубинового интерфейса.
Ваш рубиновый веб-сервис может взаимодействовать с бэкэнд, используя REST (или любой другой HTTP-подход). Это приведет к более чистым и многоразовым кодам. Поскольку вы можете получить доступ к данным бэкэнд с любым клиентом, способным к HTML.
В этом подходе клиенты должны подключиться к сокету TCP на бэкэнд для отправки данных взад и вперед. Вам нужно написать небольшой байтовый или строковый протокол, который также необходимо проанализировать. Это более сложный, чем первый подход, но также более эффективный, и вам не нужно полагаться на внешние библиотеки (например, трикотаж, для REST). Он также обладает всеми преимуществами прежнего подхода, вы можете обслуживать любого клиента, способного осуществлять сетевую связь и обработку сокетов.