我在将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.js
和primus.js
都在使用transport
(为什么有两个单独的文件,耶稣?!)
我可以尝试仅使用engine.io
而不使用primus
,但我不知道这是否会有任何帮助。我发现的所有帖子和样本都很老了 - 请帮我解决任何最新的解决方案,或者至少解释一下需要做些什么 - 对我来说似乎是一个全新的世界:)
提前致谢!
编辑: 感谢The_asMan,我发现它与握手有关。我尝试了this简单的例子(尽管它已经很老了) - 它对Flash客户端来说非常完美 !当然我无法将Web套接字连接到它,因为握手不合适 - 它有一些协议。
所以我想我只需要了解如何在节点中获取<policy-file-request/>
- 我将能够返回策略文件。但我不知道如何得到它 - 我没有收到任何data
或connect
处理程序......
答案 0 :(得分:1)
答案 1 :(得分:1)