2012-05-07 4 views
2

Я создаю систему имитации, состоящую из тестового жгута, создающего несколько процессов с помощью ProcessBuilder. Я хотел бы иметь возможность отправлять несколько команд для отдельных процессов, и я только думал о парах вариантов - ни один из них не кажется очень забавным.Как отправить команды подпроцессу

Первый способ заключается в том, чтобы установить связь между родительским процессом и подпроцессами с использованием сокетов, а именно, как подчиняются друг другу подпроцессы. Другой - использовать метод Writer, и я использую метод Reader для чтения и печати потока intput из каждого процесса. Я думаю, что для обоих из них потребуется аналогичный уровень бухгалтерского учета. В идеале было бы неплохо вызвать такую ​​функцию, как для любого подкласса, но я знаю, что это не так, как работает многопроцессор.

Пожалуйста, дайте мне знать, что вы думаете, лучший способ реализовать это!

Спасибо, David

Обновление: Я в конечном итоге создать сокет сервера в тестовом жгуте, который взаимодействует со всеми подпроцессами. Как только система настроена, это так же просто, как добавление сообщения в очередь, которое затем отправляется правильному клиенту.

+1

Для меня неясно, к чему вы хотите добраться. Вы можете создавать несколько потоков в Java, и каждый поток может запустить подпроцесс. Может быть, вам не нужен подпроцесс, но он может сделать это полностью на Java? –

+0

Поскольку я имитирую систему, которая будет выполняться на трех отдельных компьютерах, это требование, чтобы они были отдельными процессами. –

ответ

2

Этот ответ в ответ на ваше заявление:

«В идеале было бы неплохо, чтобы вызвать функцию, как вы бы для любого подкласса, но я знаю, что просто не так, как мульти-процесс работы «.

Если вы хотите, вот как вы на самом деле можете сделать это, если суб-процессы Java программы, работающие на JVM:

Использование Remote Method Invocation. wikipedia article имеет небольшой пример сервера и клиента RMI.

В сущности, это работает следующим образом:

  1. сервер предоставляет некоторые услуги, с помощью дистанционных методов, путем внедрения «удаленный интерфейс» (определение которого должно быть имеющимся клиент также)
  2. Когда сервер запускается, он создает экземпляр объекта, который реализует службу, и «связывает» его с «Реестром RMI»
  3. Клиент ищет реестр «RMI» для удаленного объекта, который он хочет для вызова методов и получения объекта, который, как представляется, реализует удаленный интерфейс.
  4. Тогда клиент может вызывать методы для этого объекта, а время выполнения RMI гарантирует, что вызов приведет к удаленному объекту, и результаты будут возвращены.

Это, как представляется, «официальной» Hello World пример: http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html

Аргументы вызова должны быть Serializable (так что они могут быть переданы по сети). Обычно это должно быть таким же простым, как добавление implements Serializable к определению их типа.

+0

Будучи относительно новичком-программистом, я должен сказать, что все это кажется довольно сложным. Понятие звучит так, как будто оно может работать, но мне может потребоваться некоторое время, чтобы определить, является ли это для меня ответом. –

+0

@DavidK - В сущности, RMI реферат все материалы «inter process communication», позволяющие вам (после некоторой настройки) совершать вызовы на «удаленный» объект на «удаленной» JVM почти так, как если бы это был локальный объект. Причина, по которой я даже опубликовал этот ответ, состояла в том, что вы предпочли просто «вызвать функцию». Это может быть или не быть лучшим способом для вашей проблемы. – ArjunShankar

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