在官方API的child_proces模块示例代码中有这么一段代码father.js: var normal = require(‘child_proces’).fork(__dirname +’/child.js’, [‘normal’]); var special = require(‘child_process’).fork(__dirname +’/child.js’, [‘special’]); // Open up the server and send sockets to child var server = require(‘net’).createServer(); server.on(‘connection’, function (socket) { // if this is a VIP if (socket.remoteAddress === ‘74.125.127.100’) { special.send(‘socket’, socket); return; } // just the usual dudes normal.send(‘socket’, socket); }); server.listen(1337); 另外一个child.js文件代码如下: process.on(‘message’, function(m, socket) { console.log(‘here’); if (m === ‘socket’) { socket.end(‘You were handled as a ’ + process.argv[2] + ’ person’); } });
我的问题是当在命令行窗口运行father.js,即启动TCP监听服务。当在浏览器输入http://localhost:1337来访问本地端口时,console.log(‘here’);这句代码被执行了三次,也就是说在father.js中special.send(‘socket’, socket)被执行了三次。这是为什么呢?怎么避免这个问题?
当我通过在docs命令行下执行telnet localhost 1337来触发监听时,node控制台只打印了一次“here”。这又是为什么呢?
应该多请求了/和/favicon.ico,你手动屏蔽一下这个两个路径请求试试
TCP的socket中也有这个问题么,我记得node处理http请求有这个问题。如果是这样,那么socket中也无法获取浏览器的请求信息啊。
@mingenhuang TCP中肯定没有这个问题,但是你问题描述的是“浏览器输入。。。”
@showen 嗯,应该跟这个有关,因为telnet就不是有上述问题。但是也应该是发起/和/favicon.ico两次请求而已吧,还是无法理解调用了3次。你手动屏蔽过/favicon.ico路径请求。