通过websockets将Flash连接到节点 - Crossdomain.xml问题

时间:2016-09-13 20:13:03

标签: node.js actionscript-3 flash heroku cross-domain

我正在尝试建立一个简单的websocket服务器,它在Flash AS3客户端和Node.js后端之间进行通信。以下代码是客户端和服务器都在本地托管的时间。当swf托管在本地连接到heroku上托管的服务器时,代码也能正常运行。当swf和服务器都在线托管时,套接字才会失败。

Node.js代码(服务器)

var WebSocketServer = require("ws").Server
var net = require('net');
var http = require("http")
var express = require("express")
var app = express()
var crossdomain = require('crossdomain')
var port = process.env.PORT || 5000;

app.use(express.static(__dirname + "/"))
var xml = crossdomain({ domain: '*' });


app.all('/crossdomain.xml', function (req, res, next) {
  res.writeHead(200, { 'Content-Type': 'application/xml; charset=utf-8' });
  res.write(xml);
  //res.write(new Buffer([0x00]))
  res.end();
});


var server1 = http.createServer(app)
server1.listen(port)

console.log("http server listening on " + port)

var wss = new WebSocketServer({server: server1})

wss.on("connection", function(ws) {
  console.log("Connected");

  ws.on("close", function() {
    console.log("websocket connection close")
  })
})

Crossdomain文件 - example.com/crossdomain.xml

<cross-domain-policy>
  <allow-http-request-headers-from domain="*" headers="*"/>
  <site-control permitted-cross-domain-policies="all"/>
  <allow-access-from domain="*" secure="false"/>
</cross-domain-policy>

AS3代码(客户端) - 我正在使用(https://github.com/theturtle32/AS3WebSocket

import com.worlize.websocket.*;
Security.loadPolicyFile("http://example.com/crossdomain.xml");
var websocket:WebSocket = new WebSocket("ws://example.com", "*", "echo-protocol");

websocket.addEventListener(WebSocketEvent.OPEN, handleWebSocketOpen);
websocket.connect();

var con = false;

function handleWebSocketOpen(event:WebSocketEvent):void {
  trace(event);
}

当从服务器访问客户端时,会发生对crossdomain.xml的请求,并且它会成功返回给客户端,但此时不再发生任何事情。我一直试图解决这个问题多年没有运气。我确实发现当你返回crossdomain文件时,你需要以0x00结束它才能正确读取,但我还没有找到一种方法来完成这项工作。我已经尝试将res.write(new Buffer([0x00]))添加到来自跨域请求的响应以及其他几个修改无效。这些似乎都阻止了xml文件无效。

如果有人能帮助我实现这一目标,我将非常感激,我已经在很长一段时间里努力奋斗,似乎无法让这最后一步工作。

0 个答案:

没有答案