[英]Sending data from flash to node.js server with socket.io
我在node.js中有一个简单的基于socket.io的服务器,它监听端口81中的套接字(例如)我在使用Javascript编写的客户端之间连接和传递数据没有问题但经过多次尝试我无法得到我的Flash应用程序连接到服务器并将数据传递给它(我在Web中找到了一些示例 - 但它们都是基于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.IO ,就像一个魅力。
我们不得不在服务器端做一些小的调整(即确保socket.io在端口843而不是10843上侦听策略文件)并激活flashsocket传输,但是通信是轻而易举的。
io.configure(function() {
io.set('transports', ['websocket','flashsocket']);
io.set('flash policy port', 843);
});
注意:此配置要求node.js以root身份运行!
尝试此解决方案(除了端口843上的游戏服务器之外,还需要设置套接字策略服务器)
顺便说一句:当你使用套接字时总是使用url像xmlsocket://host:port
(对于端口843 flash自动加载策略文件)而不是http://host:port
witch仅用于http请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.