网络插座& Flash套接字客户端连接到一个Node.js

时间:2014-04-14 14:41:19

标签: node.js actionscript-3 websocket flashsocket engine.io

我在将Flash客户端连接到Node.js服务器时遇到问题。

短篇小说

我第一次构建一个Node.js服务器,该服务器应该由Web客户端(WebSocket)和Flash客户端(Socket)使用。当然,网络客户端就像一个魅力,但我无法克服Flash。我得到了SECURITY_ERROR。经过一天的研究后,我认为这是因为没有加载策略文件。想法(在engine.io之上的primus?)

长篇故事

我正在使用Primus因为我认为我需要它,因为我有两个网络套接字和闪存套接字都可以处理。不确定这是否准确? :)

我正在使用Engine.io作为“变换器/传输器” - 该层使用的主要框架。我不会讨论标准的Web客户端(使用Chrome和primus-client),因为它很容易设置。

我在AS3中使用简单和标准的套接字:

_socket = new Socket();
_socket.addEventListener(Event.CONNECT, onSocketConnect);
//...
_socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
_socket.addEventListener(IOErrorEvent.IO_ERROR, onIOError);

_socket.connect('localhost', '1337);

在Flash IDE中构建它时,它会转到onSocketConnect函数,但如果我尝试向socked写任何东西 - 我会断开连接。如果我从网络浏览器运行它,我会进入onSecurityError方法。

我必须说我在节点控制台中没有任何痕迹!

primus.on('connection', function connection(spark) {
  console.log('new connection'); // never gets logged!

据我所知,当策略文件出错时会引发安全性错误,因此我开始寻找解决方案。

我在线阅读了很多内容,最常见的解决方案是简单使用socket.io和所谓的FlashSocket.IO。我尝试实现它,但它已经很老了,有些代码是一种缺失,我终于从hurlant库中得到了一些错误 - 我无法让它工作。

我还看到了一些名为policy的节点包,它运行单独的服务器来处理策略文件。

我尝试在其中添加transport数组flashsocket - 没有变化。我也无法理解为什么所有样本都在使用transports - 我搜索了index.jsprimus.js都在使用transport(为什么有两个单独的文件,耶稣?!)

我可以尝试仅使用engine.io而不使用primus,但我不知道这是否会有任何帮助。我发现的所有帖子和样本都很老了 - 请帮我解决任何最新的解决方案,或者至少解释一下需要做些什么 - 对我来说似乎是一个全新的世界:)

提前致谢!

编辑: 感谢The_asMan,我发现它与握手有关。我尝试了this简单的例子(尽管它已经很老了) - 它对Flash客户端来说非常完美 !当然我无法将Web套接字连接到它,因为握手不合适 - 它有一些协议。

所以我想我只需要了解如何在节点中获取<policy-file-request/> - 我将能够返回策略文件。但我不知道如何得到它 - 我没有收到任何dataconnect处理程序......

2 个答案:

答案 0 :(得分:1)

您有跨域政策问题。

我在这里回答了所有问题。

AS3 - Flash/AIR Socket Communication writeUTFBytes only works once

答案 1 :(得分:1)

只是一个想法: 在某些操作系统上,flush()在执行帧之间自动调用,但在其他操作系统(如Windows)上,除非您显式调用flush(),否则永远不会发送数据。为确保您的应用程序在所有操作系统中可靠地运行,最好在将每条消息(或相关数据组)写入套接字后调用flush()方法。