在node.js的HTTP旁边的端口80上提供Flash策略请求

我想从Flash浏览器客户端提供套接字连接,因此我需要添加对策略请求文件协议的支持。 由于防火墙等原因,我无法在默认端口843上运行策略文件请求服务。我唯一的select是在端口80上服务器协议,在我的HTTP服务器旁边。

我的应用程序是在node.js中编写的,下面的代码工作:

var httpServer = http.createServer(); net.createServer(function(socket){ httpServer.emit('connection', socket); }).listen(80); 

我在端口80上打开一个套接字服务器,现在我只是在httpServer上发出连接事件,到目前为止没有问题。 现在我想检查一下新的套接字是否是一个策略文件请求,它只是通过TCP连接发送纯<policy-file-request />string<policy-file-request /> 。 当我注意到这个string,我知道它不是HTTP,我可以返回crossdomain文件并closures套接字。 所以我现在尝试的是这样的:

 net.createServer(function(socket){ socket.once('readable', function(){ var chunk = socket.read(1); // chunk[0] === 60 corresponds to the opening bracket '<' if(chunk !== null && chunk[0] === 60) { socket.end(crossdomain); } else { socket.unshift(chunk); httpServer.emit('connection', socket); } }); }).listen(80); 

现在我检查第一个字节是否是左括号“<”,然后将跨域文件写入套接字。 否则,我将unshift块移到stream上,并在HTTP服务器上发送套接字作为连接。 现在的问题是,HTTP服务器不再发出请求事件,我的常规HTTP请求不作为结果处理。

我也试过这个解决scheme,但是也没有成功:

 httpServer.on('connection', function(socket){ socket.once('data', function(chunk){ if(chunk[0] === 60) { socket.end(crossdomain); } }) }); 

当套接字发出数据事件时,套接字的readyState已经被closures,并且httpServer已经抛出了一个clientError事件。 我到处search,没有find解决办法。 我也不希望通过另一个套接字将数据通过pipe道传输到另一个端口,在那里我的HTTP服务器在本地运行,因为这增加了许多不必要的开销。 有没有一个干净的方式来做到这一点在node.js? 我在node.js版本0.10.26上testing了这一切。

Interesting Posts