从零开始搭建node.js+xmlSocket的WEB聊天室(四)

四、搭建flash 安全策略服务器

flash在进行socket通讯的时候会有安全策略问题,一般错误为:

securityErrorHandler信息: [SecurityErrorEvent type=”securityError” bubbles=false cancelable=false eventPhase=2 text=”Error #2048″]

在Flash player 9.0.124.0之后,当flash文件要进行socket通信的时候,需要向服务器端获取crossdomain.xml文件。如果找不到就出现客户端无法连接服务器的现象。

具体关于有关安全策略的问题,可以参看adobe的相关介绍

在本案中,我们使用node.js编写一个简单的服务监听在843端口,为flash提供安全策略文件,当然如果在之前编写.AS文件的时候指定了安全策略服务器位置,Security.loadPolicyFile(“xmlsocket://www.xxx.com:1234”),这里就要监听在相应的port了。

var net = require('net');

var policyListenPort = 843;
var policy = net.createServer();
policy.listen(policyListenPort);
policy.on('connection', function(socket){
	console.log("[" + now() + "][REQ][" + socket.remoteAddress + "] send cross-domain-policy from policy server on [" + policyListenPort + "] port.");
	socket.end('\0');

	socket.on('error',function(error){
		console.log("["+ now() + "][ERR] " + error);
	})
})

function now(){
	var date = new Date();
	var now = date.getFullYear() + "-" + date.getMonth() + "-" + date.getDate() + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
	return now;
}

上面的代码是node.js代码,需要在服务器上运行的,除了我们使用node.js编写策略文件服务器外,可以直接下载:http://www.adobe.com/content/dotcom/en/devnet/flashplayer/articles/socket_policy_files/_jcr_content/articlePrerequistes/multiplefiles/node_1277808777771/file.res/flashpolicyd_v0.6[1].zip 这是由官方提供的python和perl编写的服务器。

只有一个策略服务器事实上可能还会有些问题,某些客户端的防火墙会禁止对外部843端口的访问,基于flash socket policy 解决方法,我们会在聊天室socket server上也同时提供policy file 服务。这个在稍后的程序中提到,所以实际上这里的专用的policy file server是可以不提供的。

注意这段程序在通过socket发送内容的时候,最后有个 \0,这是因为flash xmlsocket认为\0是内容结束的标志。

发表评论