Как настроить файл политики флэш-сервера с помощью socket-io 1.3.5 (сервер узла)?

Я пытаюсь подать файл политики встроенной флэш-памяти на порт 3000, но безуспешно.

Я не могу поймать какой-либо обратный вызов от вызова политики флэш (<policy-file-request/>\0). И я не знаю, как обслуживать файл политики отправки обратно на флэш через сокет.

Примерно так: Настройка файлового сервера политики сокетов от Adobe

Это код с сервера:

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 ответа

Вы неправильно используете соединения и коммуникации с 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);
});

Как насчет того, чтобы попробовать пакет npm crossdomain, который я рекомендовал в качестве решения (посмотрите на комментарии) в этом вопросе?

Надеюсь, что это может помочь.

Другие вопросы по тегам