我在将 Flash 客户端连接到 Node.js 服务器时遇到问题。
短篇小说:
我第一次构建了一个 Node.js 服务器,它应该由 Web 客户端 (WebSocket) 和 Flash 客户端 (Socket) 使用。当然,Web 客户端就像一个魅力,但我无法克服 Flash 客户端。我得到 SECURITY_ERROR。经过一天的研究,我认为这是因为未加载策略文件。想法(engine.io 之上的首要)?
长篇大论:
我正在使用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 写入任何内容 - 我会断开连接。如果我从 Web 浏览器运行它,我会进入该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
without primus
,但我不知道这是否有任何帮助。我发现的所有帖子和示例都很旧 - 请帮助我提供任何最新的解决方案或至少解释需要做什么 - 对我来说似乎是一个全新的宇宙:)
提前致谢!
编辑: 感谢 The_asMan,我发现它与握手有关。我已经尝试过这个简单的例子(尽管它已经很老了)——它非常适合 Flash 客户端!当然,我不能将 Web 套接字连接到它,因为握手不正确 - 它有某种协议。
所以我想我只需要了解如何获取<policy-file-request/>
in 节点 - 我将能够返回策略文件。但我不知道如何得到它 - 我没有收到任何类型的data
或connect
处理程序......