【问题标题】:How to server flash policy file with socket-io 1.3.5 (node server)?如何使用 socket-io 1.3.5(节点服务器)服务器闪存策略文件?
【发布时间】:2015-06-23 14:28:48
【问题描述】:

我正在尝试在端口 3000 上提供内联闪存策略文件,但没有成功。

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

类似这样的东西:来自 Adob​​e 的 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");

【问题讨论】:

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


    【解决方案1】:

    您的 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);
    });
    

    【讨论】:

    • 由于跨域限制,我认为此解决方案不会起作用。我正在尝试实现adobe socket policy
    • @MarosPixel 哦,谢谢。那么哪个部分不起作用?我注意到 socket.io 部分与我使用的不同,所以我认为这可能是导致问题的原因(因为回调没有与客户端的连接)。我对 Adob​​e 做的不多,所以我不知道它会与跨域限制冲突。我猜我设置的 xml 解析错误。
    【解决方案2】:

    试试我在这个question 中推荐的solution(看看cmets)npm crossdomain package 怎么样?

    希望能有所帮助。

    【讨论】:

    • 感谢您的回复,但我认为这个包是针对http跨域的,我需要实现socket croosdomain策略。
    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 2020-04-28
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2022-09-28
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多