通过ruby进程共享变量

我正在写一个gem,我必须分叉两个进程,这两个进程启动两个webrick服务器。 我想通过基类中的类方法启动此服务器,因为应该只运行这两个服务器,而不是多个服务器。 在运行时,我想在这两个服务器上调用一些方法来更改变量。

我的问题是,我无法通过基类的类方法访问forks的实例变量。 此外,我不能在我的基类中使用线程,因为我在使用另一个非线程安全的库。 所以我必须将每个服务器分配给它自己的进程。

我用类变量尝试了它,比如@@server 。 但是当我尝试通过基类访问这些变量时,它是nil 。 我读过Ruby中不可能在forks中共享类变量,对吗?

那么,还有其他方法吗? 我想过使用单身,但我不确定这是不是最好的主意。

当您分叉进程时,子进程和父进程的内存是分开的,因此您无法直接在它们之间共享变量。 因此,单例类不适用于您的情况。

解决方案是IPC ,Ruby支持管道和套接字 ,这是两种最常用的IPCforms,至少在* NIX上。 如果您需要更透明的接口,Ruby还支持分布式对象 。

你选择什么取决于工作。 如果您知道要在某些时候将进程拆分为多台计算机,请使用套接字或drb。 如果没有管道。

这是Ruby中管道的简短介绍