我正在创建一个模拟系统,其中包含一个使用 ProcessBuilder 创建多个进程的测试工具。我希望能够向单独的进程发送多个命令,并且我只想到了几个选项 - 这两个选项看起来都不是很有趣。
第一种方法是使用套接字在父进程和子进程之间进行通信,这就是子进程相互通信的方式。另一种是使用 Writer 方法,我一直在使用 Reader 方法来读取和打印每个进程的输入流。我认为这两者都需要类似水平的簿记。理想情况下,像调用任何子类那样调用函数会很好,但我知道这不是多进程的工作方式。
请告诉我您认为实现此目的的最佳方法是什么!
谢谢, 大卫
更新:我最终在测试工具中创建了一个与所有子进程通信的服务器套接字。系统设置完毕后,就像将消息添加到队列中一样简单,然后将其发送到正确的客户端。
最佳答案
此答案是对您的陈述的回应:
"Ideally it would be nice to call a function like you would for any subclass, but I know that just isn't how multi-process works."
如果您愿意,如果子进程是在 JVM 上运行的 Java 程序,您可以实际执行以下操作:
使用Remote Method Invocation 。 wikipedia article有一个 RMI 服务器和客户端的小示例。
本质上,它的工作原理如下:
- 服务器通过远程方法、实现“远程接口(interface)”(其定义也应该可供客户端使用)来提供一些服务
- 当服务器启动时,它会创建一个实现服务的对象实例,并将其“绑定(bind)”到“RMI 注册表”
- 客户端在“RMI 注册表”中查找要调用其方法的远程对象,并获取一个似乎实现了远程接口(interface)的对象。
- 然后客户端可以调用该对象的方法,RMI 运行时确保调用到达远程对象,并返回结果。
这似乎是一个“官方”Hello World 示例: http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html
调用的参数必须是可序列化
(以便它们可以通过网络传输)。通常,这应该像将 implements Serialized
附加到其类型定义中一样简单。
关于java - 如何向子进程发送命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10485707/