actionscript 3 -通过socket.io从flash发送数据到node.js服务器



我有一个简单的socket。基于IO的服务器在node.js中监听端口81的套接字(例如)我在用Javascript编写的客户端之间连接和传递数据没有问题但经过多次尝试后,我无法让我的Flash应用程序连接到服务器并将数据传递给它(我在网上找到了一些例子——但它们都是基于flex的,使用的类不是基本AS3库的一部分)

当我试图使用XMLSocket连接到套接字时-我得到安全沙箱违规错误-我知道我需要加载策略文件(假设使用socket.io可用)但我做不到

这是我的flash代码:
Security.loadPolicyFile("http://127.0.0.1:81/crossdomain.xml");
socket = new XMLSocket("127.0.0.1", 81);
socket.addEventListener(Event.CONNECT, onConnect);  
socket.addEventListener(IOErrorEvent.IO_ERROR, onError);  
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityEvent);
socket.addEventListener(DataEvent.DATA, onData);

,服务器端代码为

var app = require('http').createServer(function (req, res) {...})
   , io = require('socket.io').listen(app, { log: true })
   , fs = require('fs')
app.listen(81);
io.sockets.on('connection', function (socket) {
    console.log("connection "+socket.id);
    socket.on("message",function(data){
        console.log("data: "+data);
    });
    socket.on("data",function(d){
         console.log('data from flash: ',d);
    });
    socket.on('disconnect', function (socket) {
        console.log("disconnect");
    });
});

和我的crossdomain.xml是:

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

非常感谢您的时间!

对于我们的上一个项目,我们使用FlashSocket。

我们不得不在服务器端做一些小的调整(例如,确保socket。IO在端口843(而不是10843)上侦听policy文件,并激活flashsocket传输,但通信是轻而易举的。

io.configure(function() {
  io.set('transports', ['websocket','flashsocket']);
  io.set('flash policy port', 843);
});

注意:这个配置需要node.js以root身份运行!

尝试此解决方案(除了在端口843上设置游戏服务器外,还需要设置套接字策略服务器)

BTW:当你使用套接字总是使用url像xmlsocket://host:port(端口843 flash自动加载策略文件),而不是http://host:port只用于http请求。

最新更新