Как настроить файл политики флэш-сервера с помощью 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, который я рекомендовал в качестве решения (посмотрите на комментарии) в этом вопросе?
Надеюсь, что это может помочь.