5

ポート 81 でソケットをリッスンする node.js に単純な socket.io ベースのサーバーがあります (たとえば) Javascript で記述されたクライアント間の接続とデータの受け渡しに問題はありません。サーバーに接続してデータを渡すための Flash アプリ (Web でいくつかの例を見つけましたが、それらはすべてフレックス ベースであり、基本的な AS3 ライブラリの一部ではないクラスを使用しています)

XMLSocket を使用してソケットに接続しようとすると、セキュリティ サンドボックス違反エラーが発生します。ポリシー ファイル (socket.io を使用して利用できるはずです) をロードする必要があることはわかっていますが、実行できません。それ

これは私のフラッシュコードです:

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>

お時間をいただきありがとうございました!

4

2 に答える 2

4

前回のプロジェクトでは、FlashSocket.IOを使用しました。これは魅力のように機能しました。

サーバー側でマイナーな調整を行い(つまり、socket.ioが10843ではなくポート843でポリシーファイルをリッスンするようにする)、フラッシュソケットトランスポートをアクティブ化する必要がありましたが、通信は簡単でした。

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

注:この構成では、node.jsをrootとして実行する必要があります!

于 2013-01-17T08:43:55.260 に答える
0

この解決策を試してください(ポート 843 のゲーム サーバーに加えて、ソケット ポリシー サーバーをセットアップする必要があります)。

ところで:ソケットを使用するときは、常にhttpリクエスト専用ではxmlsocket://host:portなく、(ポート843のフラッシュがポリシーファイルを自動的にロードするための)ようなURLを使用してください。http://host:port

于 2013-01-17T06:57:17.617 に答える