【问题标题】:How to serve policy file from Socket.IO/Node.js如何从 Socket.IO/Node.js 提供策略文件
【发布时间】:2015-01-18 22:30:09
【问题描述】:

我创建了一个 Socket.IO 服务器,它将列表详细信息推送到连接的客户端。通过浏览器中的 HTTP,一切都使用 Web 套接字按预期工作,但是将使用该服务的客户端类型之一是严格的 Flash(不是套接字回退,只是直接使用 Flash)。我们正在使用AS3 Web Socket Client 库。

当 Flash 客户端(由另一个团队构建)尝试连接到服务器时,它会违反安全沙盒。我知道这与从 Socket.IO 服务器提供的策略文件有关,但我不知道 如何 提供此文件。当我telnet 127.0.0.1 10843telnet 127.0.0.1 843 我没有得到回应。如果我记得,在过去的项目中,我们已经能够远程登录到策略文件服务器以获取响应。这将是帮助我验证它是否被提供的理想选择。

我知道默认端口是10843,也试过设置成843。

这是我所拥有的:

  • 在 localhost:3000 上运行的推送服务
  • 浏览器客户端可以连接和加入频道没有问题
  • 我在根目录中有一个 crossdomain.xml 文件(不确定是否需要)

我有以下与策略文件有关的设置:

// Socket Setup
io.set('transports', ['websocket','flashsocket']);
io.set('flashPolicyServer', true);
io.set('flash policy port', 843);

顺便说一句(也许),使用这些设置我在启动服务时也遇到错误(尽管它仍然启动):

Option flashPolicyServer is not valid. Please refer to the README. 
Option flash policy port is not valid. Please refer to the README.

我很茫然。希望不是重复的;我搜索了高低,并相信我错过了一些小事。有什么建议吗?

【问题讨论】:

  • 试试FlashSocket.io。我没有使用它,但它看起来像你需要的,因为自 1.0 发布以来不支持 flash。我已经更新了我的答案以反映这一点。

标签: node.js flash sockets socket.io cross-domain-policy


【解决方案1】:

似乎 Socket.IO 开发人员决定摆脱一些传输,因此由于 1.0 没有 Flash 传输支持。这有点令人困惑,因为在新文档中根本没有提到 Flash 传输存在。

在 Socket.IO 0.9 中,您可以在 socket.io 文件夹中的某处找到 WebSocketMain.swfWebSocketMainInsecure.swf 文件。在1.* 中没有任何带有.swf 扩展名的文件。

因此,如果您需要 Flash 支持,您应该使用以下命令安装 Socket.IO 0.9

npm install socket.io@0.9

【讨论】:

  • 所以我不确定我是否理解。他们彻底放弃了对 Flash 的支持?根本不支持 Flash 客户端?
  • @trnelson 是的,没有官方确认,但探索 Socket.IO 1.* 源代码表明这是真的。但您可以安装 0.9 并支持 Flash 传输。
  • 很抱歉这个问题,但如果我可以处理提供策略文件,是否仍然可以将 Flash 与 Socket.IO 一起使用?我不太熟悉确切的细节,但似乎情况可能如此。有什么想法吗?
  • @trnelson 有可能。但是您必须学习 Socket.IO protocol 才能在 Flash 上创建自己的客户端。有很多第三方客户端是用 Java、Obj-C、C# 等编写的。所以如果上面提到的语言可以,如果可以提供策略文件,那么 Flash 应该可以。
【解决方案2】:

根据socket.io documentation,当启用 flashsocket 传输时,flash policy server 默认为true。这意味着flashPolicyServer(应该是flash policy server)选项是不必要的。在设置传输之前尝试设置端口......就像这样。

io.set('flash policy port', 843);
io.set('transports', [ 'websocket', 'flashsocket' ])

这可确保当 flash 套接字服务器启动时,它会从该端口启动,而不是启动、被终止然后使用新端口重新启动。此外,由于 843 是根端口,请确保它有权使用该端口。

编辑 似乎 socket.io 完全放弃了对 flash 的支持。他们 github 上的文档适用于 0.9.0。这令人困惑。尽管我没有尝试过,但有一种替代方法可能有用。 FlashSocket.io 应该有助于满足您的需求。

【讨论】:

  • 尝试了所有这些建议,但没有运气。我以管理员身份运行 cmd 以启动 Node 服务,按照您的建议重新排列行(并尝试将端口 843 删除为默认为 10843)。仍然没有运气。我是否缺少 NPM 包或其他东西?即使使用“闪存策略端口”选项,我仍然收到错误 Option flash policy port is not valid. Please refer to the README.
  • 我知道事情在 1.0 中发生了变化,但如果他们更改了闪存策略服务器,则没有记录。
  • 嗯,根据模块文件夹中的 package.json 文件,我的版本是 1.1.0。策略文件似乎不需要额外的软件包才能工作。我的理解正确吗?
  • 据我所知,这是正确的。你能试试 0.9 看看会发生什么吗?
  • 您也可以在该端口上运行一个单独的服务器来为策略提供服务。可能会少些麻烦
猜你喜欢
  • 2012-11-26
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 2012-09-14
  • 2018-02-14
  • 1970-01-01
  • 2017-11-24
  • 2012-07-23
相关资源
最近更新 更多