让我一步一步地介绍我的问题:
我在地址www.mydomain.com:1925上使用套接字连接为我的用户提供聊天服务。当我搬到cloudflare时,我无法直接连接到1925端口,因为我的请求是通过cloudflare到达我的原始服务器并且端口正在改变。
我是如何解决的? 我创建了一个子域chat.mydomain.com,其DNS设置指向我的源服务器而不是cloudflare。我通过这种方式绕过了cloudflare,并在浏览器上使用chat.mydomain.com:1925连接聊天服务。到目前为止一切都很好。
这是问题所在。 我也在使用Flash和AS3。它是我网站游戏的核心。聊天正在使用html,我在flash中的游戏是我网站的某些部分。在闪存中,我发送了大量玩家在www.mydomain.com:1925上使用不同的命名空间再次使用套接字连接。(由于swf的主机和网址主机匹配,我没有&#t; t我认为有任何问题)。自从我将域名更改为chat.mydomain.com:1925后,Flash开始在chat.mydomain.com:1925上请求一个crossdomain.xml。 chat.mydomain.com上有一个crossdomain.xml文件,但我无法通过chat.mydomain.com:1925提供。这是我的代码:
Security.loadPolicyFile("https://chat.mydomain.com/crossdomain.xml");
var urlLoader:URLLoader = new URLLoader ();
var url:String = "https://chat.mydomain.com:1925/socket.io/1/";
var request:URLRequest = new URLRequest(url);
request.method = URLRequestMethod.POST;
urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
urlLoader.addEventListener(Event.COMPLETE, completeHandler);
urlLoader.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
urlLoader.load(request);
由于Flash无法通过获取404找到crossdomain.xml,因此我的代码中的请求不起作用。我该如何解决这个问题?
答案 0 :(得分:0)
我已经解决了这个问题。 URLRequest正在尝试连接https://chat.example.com:1925/socket.io/1/。由于swf位于域https://www.example.com上,因此swf要求https://chat.example.com:1925/crossdomain.xml。该端口不理解https,因为它用于我的websocket。所以我找不到任何方法在swf中调用此请求。然后,我提出了一个想法,我可以在瑞士法郎之外称这个网址。由于我只需要handshakeid,我通过javascript调用了这个函数。得到响应后,我通过给出handshakeid作为参数来加载我的swf。这解决了我的问题。对于需要动态调用这样的函数的人,他们可以使用ExternalInterface调用。我希望它有所帮助。