详细解读CococCreator跨域访问资源服务器

简介: 详细解读CococCreator跨域访问资源服务器

需求与思路

项目上线前有一个需求

游戏资源需要存放在cdn上

而游戏入口一般是通过运营渠道的服务器进入(服务器A)

玩家需要通过服务器A的游戏页面请求资源服务器B的游戏资源

这样就产生了跨域问题

(版本ccc1.3.3)转载请注明原文地址

具体来说问题可能有以下两个

1.浏览器跨域(本文解决)

2.WebGL模式禁止跨域(没有遇到,可能是引擎避开了这个问题)

网页技术处理跨域问题有多种解决方案

这里通过修改服务端响应头header

eg:

//任意ip均不受跨域限制

header('Access-Control-Allow-Origin:');

//指定IP如服务器A不受跨域限制

header('Access-Control-Allow-Origin: http(s)://yourdomain(or IP):port');

原理和思路大概就这么多

实现起来要小费一番周折

一方面要搭建服务器模拟资源服务器

另一方面要修改Creator引擎js源码

NodeJS搭建资源服务器

下载NodeJS并安装express

编写服务端程序代码如下

var express = require('express');

var app = express();

app.use(express.static('public'));

// 设置跨域头部

app.all('', function(req, res, next) {

res.header("Access-Control-Allow-Origin", "*");

res.header("Access-Control-Allow-Headers", "X-Requested-With");

res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");

res.header("X-Powered-By",' 3.2.1')

res.header("Content-Type", "application/json;charset=utf-8");

next();

});

// 主页输出 "Hello World"

app.get('/', function (req, res) {

console.log("主页 GET 请求");

res.send('Hello GET');

})

// 返回图片

app.get('/image', function(req, res) {

res.sendfile(__dirname + '/runoob-logo.png');

})

// 启动服务

var server = app.listen(3000, function () {

var host = server.address().address

var port = server.address().port

console.log("应用实例,访问地址为 ", (new Date()).toLocaleString(), port)

})

命令行中键入node 【路...径】app.js 启动服务程序

打开浏览器后,即如上图所示

修改图片下载模块

首先找到下载模块

engine/cocos2d/core/load-pipeline/downloader.js

function downloadImage(item, callback, isCrossOrigin, img) {

void 0 === isCrossOrigin (isCrossOrigin = true);

var url = urlAppendTimestamp(item.url);

img = img || new Image();

isCrossOrigin "file:" !== window.location.protocol ? img.crossOrigin = "anonymous" : img.crossOrigin = null;

if (img.complete img.naturalWidth > 0 img.src === url) {

callback(null, img);

} else {

function loadCallback() {

img.removeEventListener("load", loadCallback);

img.removeEventListener("error", errorCallback);

callback(null, img);

}

function errorCallback() {

img.removeEventListener("load", loadCallback);

img.removeEventListener("error", errorCallback);

"https:" !== window.location.protocol img.crossOrigin "anonymous" === img.crossOrigin.toLowerCase() ? downloadImage(item, callback, false, img) : callback("Load image (" + url + ") failed");

}

img.addEventListener("load", loadCallback);

img.addEventListener("error", errorCallback);

//img.src = url;

if(url.indexOf("testSprite") >= 0)

url = ""

img.src = url;

cc.log("test3 downloadImage" , url)

}//代码效果参考:http://www.ezhiqi.com/bx/art_5391.html

}

if(url.indexOf("testSprite") >= 0)

相关文章
|
20天前
|
存储 数据挖掘 Windows
服务器数据恢复—V7000存储raid5故障导致LUN无法访问的数据恢复案例
服务器数据恢复环境: 三台V7000存储,共有64块SAS硬盘(其中有三块热备盘,其中一块已启用)组建了数组raid5阵列。分配若干LUN,上层安装Windows server操作系统,数据分区格式化为NTFS文件系统。 服务器故障: V7000存储中有多块硬盘出现故障离线,阵列失效,LUN无法访问。需要恢复卷中所有数据(主要为dcm文件)。
|
27天前
|
前端开发 Java
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
文章介绍了如何使用SpringBoot创建简单的后端服务器来处理HTTP请求,包括建立连接、编写Controller处理请求,并返回响应给前端或网址。
45 0
学习SpringMVC,建立连接,请求,响应 SpringBoot初学,如何前后端交互(后端版)?最简单的能通过网址访问的后端服务器代码举例
|
14天前
|
Apache 数据中心 Windows
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
将网站迁移到阿里云Windows系统云服务器,访问该站点提示连接被拒绝,如何处理?
|
14天前
|
域名解析 缓存 网络协议
Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?
Windows系统云服务器自定义域名解析导致网站无法访问怎么解决?
|
2月前
|
人工智能 网络协议 Shell
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
60 1
|
2月前
|
人工智能 网络协议 Shell
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
55 0
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
|
17天前
|
存储 监控 Linux
充分利用服务器的磁盘资源,提高系统的稳定性和可维护性
充分利用服务器的磁盘资源,提高系统的稳定性和可维护性
26 0
|
19天前
|
网络安全 Docker 容器
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
17 0
|
22天前
|
弹性计算 关系型数据库 网络安全
阿里云国际版无法连接和访问Windows服务器中的FTP服务
阿里云国际版无法连接和访问Windows服务器中的FTP服务
|
3月前
|
弹性计算 监控 安全
重装系统后,无法通过云监控查看ecs资源占用怎么解决
如果您在重装系统后无法通过云监控查看ECS资源占用,可以按以下步骤排查:1. 确认云监控插件状态是否“运行中”,若不是则需重新安装;2. 通过自动安装流程安装插件,并确认状态变回“运行中”;3. 检查ECS网络配置,确保能访问外部网络;4. 验证监控功能是否正常显示数据;5. 可选设置报警规则。如问题仍存,请检查防火墙或安全组设置。通过上述步骤,您应能重新启用云监控。