最近在update我的一个github项目的时候,想要把原来单一进程的模式改成多进程的模式。
创新互联"三网合一"的企业建站思路。企业可建设拥有电脑版、微信版、手机版的企业网站。实现跨屏营销,产品发布一步更新,电脑网络+移动网络一网打尽,满足企业的营销需求!创新互联具备承接各种类型的成都做网站、网站制作项目的能力。经过十多年的努力的开拓,为不同行业的企事业单位提供了优质的服务,并获得了客户的一致好评。事情是这样的,我做了一个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会被标记为已关闭。
希望我的一点点实践可以帮到读到这篇文章的同志。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。