Как вы можете позволить двум JVM общаться без RMI или Sockets? - PullRequest
2 голосов
/ 07 марта 2012

Можно ли позволить двум отдельным JVM общаться друг с другом без RMI или Socket?

Моя ситуация выглядит следующим образом:

У меня есть сервер (приложение Java) в одной консоли, в интерфейсе командной строки. Я могу войти на компьютер с SSH, поэтому у меня есть другой терминал. Теперь я хочу запустить небольшую Java-программу, которая может общаться с сервером. Это делается для управления сервером, поэтому трафика не много (только небольшие строки проходят вокруг).

Я бы не хотел использовать Socket или RMI, поскольку он использует другой номер порта.

Является ли PipedWriter опцией? Но как теперь другой JVM, где его найти?

Спасибо

Ответы [ 2 ]

3 голосов
/ 07 марта 2012

Вы не хотите PipedWriter;это только для связи между потоками в одном и том же процессе.Вы также не можете использовать неназванный канал ОС, так как между процессами нет никакой связи.Вы могли бы использовать ОС fifo (если вы работаете в Unix, когда вы делаете это с помощью системной команды mkfifo; я не знаю достаточно эквивалентного API для Windows, чтобы помочь там)но я понятия не имею, насколько хороша Java для обработки таких именованных каналов.

Простейшие механизмы - использовать отслеживаемый файл или сокет сервера, который привязан только к порту на локальном хосте, 127.0.0.1.(При такой привязке становится невозможным получить доступ к сокету с компьютера без какой-либо локальной программы. Или с соответствующим образом настроенным туннелем SSH.) Преимущество и недостаток метода watched-file заключается в том, что ему нужно где-то, что оба процесса могут видеть (и предположительно записывать).Административный сокет несколько более открыт, но гораздо проще обрабатывать двусторонние соединения;если это имеет значение для вас, считайте, что у Java есть хорошая (если немного низкоуровневая для моих вкусов) поддержка сокетов.

Если вы думаете о совместном файловом решении, подумайте, стоит ли делать этоподать базу данных;есть драйвер JDBC для SQLite, который поддерживает безопасный параллельный доступ (и защищает от проблем с одновременными записями, держу пари, что вы никогда не задумывались).Это также может означать, что вы можете избежать написания специального клиента;Есть множество существующих инструментов.

1 голос
/ 07 марта 2012

Вы можете попробовать реализовать DefaultFileMonitor и заставить его следить за изменениями в файле.

Однако вам нужно отправить некоторые данные в этот файл через окно вашего терминала.Для чего требуется подключение к SSH-сокету и отображение некоторых команд и данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...