java - 如何将创建的套接字传递给另一个 Java 进程

标签 java multithreading sockets

我们有一个应用程序创建了许多属于它的线程的套接字,根据设计,如果这个应用程序以某种方式失败,所有线程都会停止,这是不希望的。所以为了克服这个问题,每个线程都必须与主应用程序分开,如果一个线程失败,其他线程应该运行。我们想到的一件事是将创建的套接字传递给另一个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/

相关文章:

c - 为什么当我写入套接字时它可能是 "bad file number"

java - 以下通过套接字通信的数据传输技术中的效率问题

c - 用 C (Linux) 将原始数据包注入(inject)网络

java - Delta XML-Dita 比较捕获 com.deltaxml.dita.FilterProcessingException

java - 当线程被中断时,BlockingQueue 方法是否总是抛出 InterruptedException?

Java为什么会出现MySQLNonTransientConnectionException : No operations allowed...?

python - 使用 for 循环限制程序的线程

java - 线程输出监听器

java - 反向迭代器 - 用于 reduceRight 功能

java - Swagger 递归地解决类型的依赖关系(无限循环)