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

时间:2014-05-28 19:41:21

标签: node.js flash http tcp crossdomain.xml

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

我的应用程序是用node.js编写的,以下代码可以运行:

var httpServer = http.createServer();

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

我在端口80上打开一个套接字服务器,现在我只是在httpServer上发出连接事件,到目前为止没问题。现在我想检查新套接字是否是一个policy-file-request,它只是通过TCP连接发送普通字符串<policy-file-request />。当我注意到这个字符串时,我知道它不是HTTP,我可以返回交叉域文件并关闭套接字。所以我现在尝试的是:

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);

现在我检查第一个字节是否是开头括号&#39;&lt;&#39;然后将crossdomain文件写入套接字。否则,我将chunk卸载到流上,并将该套接字作为HTTP服务器上的连接发出。现在的问题是HTTP服务器不再发出请求事件,因此我的常规HTTP请求也不会被处理。

我也试过这个解决方案,但没有成功:

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

当套接字发出数据事件时,套接字的readyState已经关闭&#39;并且httpServer已经抛出了一个clientError事件。我到处搜索,没有找到解决方案。我也不想通过另一个套接字将数据传输到我的HTTP服务器本地运行的另一个端口,因为这会增加许多不必要的开销。在node.js中有一个干净的方法吗?我在node.js版本0.10.26上测试了所有这些。

0 个答案:

没有答案