我正在使用基于套接字服务器的Windows上的Perl(ActivePerl)上的fork()
,但显然有问题(几次后不会接受连接),是否有任何解决方法?
以下是相关代码的一部分:
while($client = $bind->accept()) { $client->autoflush(); if(fork()){ $client->close(); } else { $bind->close(); new_client($client); exit(); } }
我建议安装Net :: server并使用它,因为可能没有令人信服的理由让你自己编写所有的监听和分配逻辑,Net :: server已经经过了很好的测试,可以在许多平台上工作,包括ActivePerl 。 Net :: server :: Fork个性与您正在编写的代码最相似,不过我建议使用Net :: server :: Prefork ,因为它以最低的成本提供更好的性能。
如果少数 ,你的意思是64,那么你应该看到这个讨论 。 在父进程中,您应该每隔一段时间调用一次waitpid -1,&WNOHANG
来清理已完成的子进程。
Windows没有分叉。 试图模仿它通常给不到理想的结果。
最好的解决方案可能是重写你的代码,所以它不使用fork。 也许线程?