首页 > 代码库 > windows下node.js进程间传递客户端socket的一些规律

windows下node.js进程间传递客户端socket的一些规律

最近在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会被标记为已关闭。





希望我的一点点实践可以帮到读到这篇文章的同志。

本文出自 “MALPOWER” 博客,请务必保留此出处http://malpower.blog.51cto.com/9385371/1553156

windows下node.js进程间传递客户端socket的一些规律