如何从Socket.IO/Node.js提供策略文件

时间:2014-11-20 21:45:28

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

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

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

我知道默认端口是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.

我不知所措。希望不是重复;我搜索得很高,并且相信我错过了一些小事。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

似乎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

答案 1 :(得分:0)

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

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

这确保了当闪存套接字服务器启动时,它从该端口开始,而不是启动,被杀死然后使用新端口重新启动。此外,由于843是根端口,请确保它具有使用该端口的权限。

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