最近在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会被标记为已关闭。
希望我的一点点实践可以帮到读到这篇文章的同志。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。