L'envoi de données à partir de flash pour node.js serveur avec la prise.io
J'ai une simple prise.io serveur basé en node.js qui est à l'écoute pour une prise dans le port 81 (par exemple)
Je n'ai aucun problème de connexion et la transmission des données entre les clients écrite en Javascript
Mais après beaucoup d'essais, je ne peux pas obtenir mon Flash app pour vous connecter au serveur et de transmettre des données à
(J'ai trouvé quelques exemples dans le web, mais ils sont tous à base de flex et de l'utilisation des classes qui ne sont pas parties de la base AS3 bibliothèques)
lorsque j'essaie de connecter à la prise à l'aide d'un XMLSocket - je obtenir Sandbox de Sécurité de l'Erreur de Violation d' - je sais que j'ai besoin de charger le fichier de stratégie (ce qui suppose d'être disponibles à l'aide de socket.io)
mais je n'arrive pas à le faire
c'est mon flash code:
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);
et le côté serveur de code est
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");
});
});
et mon crossdomain.xml est:
<?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>
Je vous remercie beaucoup pour votre temps!
J'ai, mais encore le flash de lancer une erreur:
Request for resource at xmlsocket://127.0.0.1:81 by requestor from XXXXX.swf is denied due to lack of policy file permissions
Votre
loadPolicyFile()
appel n'est pas dirigée vers un fichier de stratégie. Essayez Security.loadPolicyFile("http://127.0.0.1:81/crossdomain.xml")
.essayé - c'est de charger le fichier de stratégie, mais j'ai toujours l'erreur dans mon commentaire précédent (avant j'ai ajouté
Security.loadPolicyFile(...)
j'ai eu une autre erreur qui signifie que le flash peut lire le fichier de stratégie, mais la politique ne permet pas assez dechangé pour as3 code pour la mise à jour + ajout de la crossdomain.xml contenu. peut-être que le problème est là
OriginalL'auteur Yaron U. | 2013-01-16
Vous devez vous connecter pour publier un commentaire.
Pour notre dernier projet, nous avons utilisé FlashSocket.IO, a travaillé comme un charme.
Nous avons dû faire des adaptations mineures sur le côté serveur (c'est à dire assurez-vous que la prise.io est à l'écoute de la fichierstratégie sur le port 843 plutôt que 10843) et activer le flashsocket de transport, mais la communication a été un jeu d'enfant.
REMARQUE: cette configuration nécessite node.js pour être exécuté en tant que root!
io.set('transports', ['websocket', 'flashsocket']);
- Merci quand même 🙂Ah ouais, vous avez raison...il me manquait que le flashsocket le transport est désactivée par défaut, désolé. Ajusté ma réponse en conséquence
en passant, cette bibliothèque ne fonctionne pas sans le flex bibliothèques (mx) github.com/simb/FlashSocket.IO/blob/0.7.x/src/com/pnwrain/... il utilise
mx.collections.ArrayCollection
etmx.utils.URLUtil
Ouais, ma collègue a dû bidouille un peu avec la source pour le rendre indépendant de flex. Mais je ne peux pas vous donner tous les détails, depuis qu'il est en vacances :/
Je l'ai fait aussi par l'ajout de la
URLUtil
code source de mon projet 🙂OriginalL'auteur schaermu
Essayer cette solution (vous avez besoin pour l'installation de la prise de la politique de serveur pour le serveur de jeu sur le port 843)
BTW: lorsque vous utilisez la prise de toujours utiliser des url comme
xmlsocket://host:port
(pour le port 843 flash charge de la politique de fichier automatiquement) plutôt que dehttp://host:port
sorcière est seulement pour les requêtes http.OriginalL'auteur fsbmain