最近在update我的一个github项目的时候,想要把原来单一进程的模式改成多进程的模式。
超过十多年行业经验,技术领先,服务至上的经营模式,全靠网络和口碑获得客户,为自己降低成本,也就是为客户降低成本。到目前业务范围包括了:成都网站制作、网站建设,成都网站推广,成都网站优化,整体网络托管,微信小程序,微信开发,app软件开发公司,同时也可以让客户的网站和网络营销和我们一样获得订单和生意!
事情是这样的,我做了一个HTTP服务器,支持动态脚本。
在完成了一大堆各种各样的特性后,遇到了一个脚本超时的问题。
在我的HTTP服务器中,将页面分成了Template和Activity两个部分,一个是用做VIEW的,一个是用作MODULE的,也就是类似于ASP啦。
但是,由于NODE.js是单进程的,所以我无法控制Activity中的代码(为用户脚本)。
所以,如果Activity中出现死循环,那么整个http服务器就会因此死掉,所以我想做一个检测脚本超时的特性。
===================================割了==========================
好了,进入正题。
我的想法是这样的,从主进程来接受socket,然后send给子进程,然后由子进程进行相关的操作(包括域名分析、POST读取等行为)之后执行请求的用户Activity。这个字进程每隔一段时间向主进程发送一个alive消息,如果超过了一段时间子进程都没有向主进程发送alive消息,那么主进程就kill掉子进程,防止超时的脚本继续执行,之后新启一个进程代替刚才被kill掉的子进程。
想法是这样的,但是遇到了一些问题。
本以为这个事情可以很轻松的完成,但是在主进程发送socket给子进程后,子进程会绑定一个data事件在传来的socket上。问题来了,在子进程中,如论如何都无法出发data事件。
后经实验,情况是这样的,socket在被主进程发送给子进程之前,客户端发送来的数据就已经发送给主进程了,所以在子进程中没有数据可读,自然就如法出发data事件。
经过修改,我在主进程中读取一个请求数据,然后连socket带第一次读取的数据,一起发送给了子进程。
主进程将socket发送给子进程后,主进程中的socket好像会被自动关闭。好吧,这对我没有影响。
简短的总结:
客户端socket会一次性发送一条请求的全部数据至主进程,子进程读取socket前所有内容都已经被发送给主进程了。
在某个进程发送socket给其他进程后,在本进程内的socket会被标记为已关闭。
希望我的一点点实践可以帮到读到这篇文章的同志。