如何使用socket-io 1.3.5(节点服务器)服务器闪存策略文件?

时间:2015-06-23 14:28:48

标签: node.js actionscript-3 flash socket.io cross-domain-policy

我试图在端口3000上提供内联闪存策略文件,但没有运气。

我无法捕获来自Flash政策调用(<policy-file-request/>\0)的任何回调。而且我不知道如何通过套接字将发送策略文件发送回闪存。

Somethig喜欢这样:来自Adobe的Setting up a socket policy file server

这是来自服务器的代码:

var server   = require('http').createServer();
var io       = require('socket.io')(server);

var port = 3000;

var xml = '<?xml version="1.0"?>\n<!DOCTYPE cross-domain-policy SYSTEM \n"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">\n<cross-domain-policy>\n';
    xml += '<site-control permitted-cross-domain-policies="master-only"/>\n';
    xml += '<allow-access-from domain="*" to-ports="*"/>\n';
    xml += '</cross-domain-policy>\n';

io.on('connection', function (socket) {
    socket.on('<policy-file-request/>\0', function (data, callback) {
        console.log('socket policy-file-request 0');
        callback(xml);
    });
});

server.listen(port, function () {
    info('Server listening at ' + port);
});

来自客户:

Security.loadPolicyFile("xmlsocket://example.com:3000");

2 个答案:

答案 0 :(得分:0)

您正在进行socket.io连接和通信不正确。你必须发出套接字而不是使用回调方法,因此(代码的修改):

服务器:

var server   = require('http').createServer();
var io       = require('socket.io')(server);

var port = 3000;

var xml = '<?xml version="1.0"?>\n<!DOCTYPE cross-domain-policy SYSTEM \n"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">\n<cross-domain-policy>\n';
    xml += '<site-control permitted-cross-domain-policies="master-only"/>\n';
    xml += '<allow-access-from domain="*" to-ports="*"/>\n';
    xml += '</cross-domain-policy>\n';

io.on('connection', function (socket) {
    socket.on('<policy-file-request/>\0', function (data) {
        console.log('socket policy-file-request 0');
        socket.emit('<policy-file-request/>\0', xml);
    });

    socket.on('<policy-file-request/>', function (data) {
        console.log('socket policy-file-request');
        socket.emit('<policy-file-request/>', xml);
    });
});

server.listen(port, function () {
    info('Server listening at ' + port);
});

客户端:

//
//Existing code (socket setup)
//

socket.on('<policy-file-request/>\0', function(data){
    Security.loadPolicyFile(data);
});
socket.on('<policy-file-request/>', function(data){
    Security.loadPolicyFile(data);
});

答案 1 :(得分:0)

npm crossdomain package中尝试solution(我建议question(看看评论)怎么样?

希望可以提供帮助。