我们有一个应用程序创建了许多属于它的线程的套接字,根据设计,如果这个应用程序以某种方式失败,所有线程都会停止,这是不希望的。所以为了克服这个问题,每个线程都必须与主应用程序分开,如果一个线程失败,其他线程应该运行。我们想到的一件事是将创建的套接字传递给另一个java进程,那么正确的方法是什么?
也欢迎使用其他方法?
等待您的建议...
最佳答案
fork :
据我所知,您不能使用普通 API 在 Java 进程之间传递套接字句柄。但是,在 Windows 上似乎是可行的 using the Winsock 2 API .在 Posix 上,你应该能够派生一个子进程来访问父套接字,因为 forked processes inherit the parent's sockets .
我认为,您可以实现一个新的 SocketImpl 类,它支持将套接字句柄移动到另一个进程,但您需要编写一些 JNI 代码来完成它。
对我来说听起来很毛茸茸,我怀疑从 Java 内部 fork 一个新进程是个好主意!
听众:
另一种方法可能是生成一个新的“监听器”进程,它本质上是一个新的预 fork 工作程序。然后每个工作人员可以轮流监听连接的套接字。 然后,工作人员需要与控制流程协调,该流程根据需要管理产生新流程。
我同意@Bozho 的观点,如果一个线程中的一个错误可以将它们全部关闭(我猜它必须是一个 JVM 异常杀死整个应用程序)你有一个更大的问题。如果可能,您应该考虑隔离线程。
关于java - 如何将创建的套接字传递给另一个 Java 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1922129/