怎么做一个守护进程方式的web程序

怎么做一个守护进程方式的web程序

想做一个web程序,第一调用的时候变成守护进程,以后,其他人访问的时候,程序直接返回结果,而不需要重新启动,怎么做呢。

之所以这样,是因为程序一开始要读一个30MB的文件,分配到数组里,我希望这个过程执行一次就行了,以后访问的时候直接得到数据,而不需要每次都有这样漫长的读数据的过程。

应该怎么实现呢?有没有参考资料,谢谢!
最简单的办法 在程序运行的后面加个&
用mod_perl...
IPC::SharedMem
方案1:shm
fork, 父进程退出,子进程setsid(),关闭所有资源,变成daemon,然后分配共享内存,初始化,维护共享内存。

其它使用资源的程序启动的时候,读共享内存(shmget创建共享内存的时候使用同一个key,这样可以得到同一个shmid),处理得到的数据。

但这样,30M数据,会不会超出共享内存的限制?

方案2:pipe
主进程创建一个命名管道,与上一样变为守护进程,做为管道的read end.
其它程序启动后,写那个管道而发请求,请求中包括自己的pid。服务端收到这个请求后,读到客户端的pid,创建另一个管道,管道以pid命名,把返回值写到新建立的管道中,而客户端从此管道中读取返回值。
问题:如果客户端太多,创建这么多管道会有限制

方案3:消息队列。。。

只提供一些思路,不知道可行不可行,也不知道perl对这些的支持怎么样。。。


QUOTE:
原帖由 白水 于 2007-12-14 22:26 发表
想做一个web程序,第一调用的时候变成守护进程,以后,其他人访问的时候,程序直接返回结果,而不需要重新启动,怎么做呢。

之所以这样,是因为程序一开始要读一个30MB的文件,分配到数组里,我希望这个过程 ...

通常fastcgi就是这样做的,fastcgi守护进程与web服务器独立开来,后者通过fastcgi协议与前者通信.


QUOTE:
原帖由 apile 于 2007-12-20 11:19 发表
用mod_perl...

mod_perl确实也可以.
你可以参考下我写的这篇doc,跟你的需求环境很类似:

http://pyh7.spaces.live.com/blog/cns!47D8D44208AC51E5!128.entry