Web套接字和Flash套接字客户端连接到一个Node.js

我有问题连接Flash客户端到Node.js服务器。

小故事

我第一次构build一个应该由Web客户端(WebSocket)以及Flash客户端(Socket)使用的Node.js服务器。 当然,networking客户端就像一个魅力,但我无法克服闪存。 我得到SECURITY_ERROR。 经过一天的研究,我认为这是因为政策文件没有被加载。 想法(primus在engine.io顶部)?

长篇小说

我使用Primus,因为我想我会需要它,因为我有networkingsockets和闪光灯sockets来处理。 不确定这是否准确? 🙂

我使用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中构build它时,它将转到onSocketConnect函数,但是如果我尝试向onSocketConnect写入任何内容,则会断开连接。 如果我从Web浏览器运行这个,我进入onSecurityError方法。

我必须说,我没有得到任何在节点控制台的痕迹!

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

据我所知,当策略文件出现错误时会引发安全错误,所以我开始寻找解决scheme。

我已经在线阅读了很多东西,最常见的解决scheme是简单的使用socket.io ,所以叫做FlashSocket.IO 。 我尝试过实现它,但它太老了,有些代码是一种失踪,我终于从hurlant图书馆得到一些错误 – 我无法得到它的工作。

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

我尝试在其中添加一个flashsocket transport数组 – 没有任何改变。 我也不明白为什么所有的样本都使用transports – 我search了index.jsprimus.js都使用transport (为什么有两个单独的文件,耶稣?!)

我可以尝试只使用engine.io没有primus ,但我不知道这是否有任何帮助。 我发现的所有post和样本都很老旧 – 请帮助我解决任何最新的解决scheme,或者至less需要解释一下需要做的事情 – 看起来像是一个全新的宇宙:)

提前致谢!

编辑:感谢The_asMan,我发现它与握手有关。 我已经尝试过这个简单的例子(尽pipe事实已经如此古老) – 它完全适用于Flash客户端 ! 当然,我不能连接networking套接字,因为握手不合适 – 它有一些协议。

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

你有一个跨域的政策问题。

我在这里回答了这一切。

AS3 – Flash / AIR Socket通信writeUTFBytes只能使用一次

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