详细解读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)

相关文章
|
3月前
|
存储 弹性计算 大数据
阿里云服务器怎么样?全访问解析云服务器ECS功能、租用、优缺点及使用说明
阿里云ECS是弹性计算服务,提供安全可靠的云服务器,包括多种实例规格如经济型、通用型、计算型等,适合不同场景。ECS支持VPC专有网络、快照与镜像、多种付费模式。用户可根据业务需求选择实例、存储类型和网络配置。阿里云服务器适用于Web应用、游戏、大数据和深度学习等场景,提供免费试用和不同优惠套餐。众多知名企业如新浪微博等信赖阿里云服务。更多信息可访问阿里云官方网站。
174 5
|
4天前
|
人工智能 网络协议 Shell
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
14 1
|
5天前
|
人工智能 网络协议 Shell
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
18 0
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
|
2月前
|
弹性计算 监控 安全
重装系统后,无法通过云监控查看ecs资源占用怎么解决
如果您在重装系统后无法通过云监控查看ECS资源占用,可以按以下步骤排查:1. 确认云监控插件状态是否“运行中”,若不是则需重新安装;2. 通过自动安装流程安装插件,并确认状态变回“运行中”;3. 检查ECS网络配置,确保能访问外部网络;4. 验证监控功能是否正常显示数据;5. 可选设置报警规则。如问题仍存,请检查防火墙或安全组设置。通过上述步骤,您应能重新启用云监控。
|
2月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
2月前
|
运维 Linux Apache
【一键变身超人!】Puppet 自动化运维神器 —— 让你的服务器听话如婴儿,轻松管理资源不是梦!
【8月更文挑战第9天】随着云计算与容器化技术的发展,自动化运维已成为现代IT基础设施的核心部分。Puppet是一款强大的自动化工具,用于配置管理,确保系统保持预期状态。通过易于理解的配置文件定义资源及其依赖关系,Puppet实现了“基础设施即代码”的理念。本文简要介绍了Puppet的安装配置方法及示例,包括Puppet Agent与Master的安装、基本配置步骤和一个简单的Apache HTTP Server管理示例,展示了Puppet在实际应用中的强大功能与灵活性。
40 9
|
2月前
|
弹性计算 Kubernetes 开发者
利用容器化服务实现游戏服务器的动态资源配置
【8月更文第12天】在游戏行业中,用户基数的变化往往呈现出明显的波动性,特别是在推广活动期间,用户基数会显著增加,而在非推广期则会有所下降。为了应对这种变化,游戏开发者需要一种能够根据用户基数动态调整服务器资源的解决方案,以确保用户体验的同时最大限度地节省成本。容器化服务因其灵活的资源管理和成本控制能力,成为了理想的解决方案。
46 2
|
3月前
|
存储 弹性计算 前端开发
云服务器 ECS产品使用问题之如何从互联网访问ECS实例上的某个文件
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
3月前
|
弹性计算 Linux 云计算
云服务器 ECS产品使用问题之如何访问游戏路径
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
2月前
|
前端开发 应用服务中间件 API
"揭秘!面试官必问:你是如何巧妙绕过跨域难题的?前端代理VS服务器端CORS,哪个才是你的秘密武器?"
【8月更文挑战第21天】在软件开发中,尤其前后端分离架构下,跨域资源共享(CORS)是常见的挑战。主要解决方案有两种:一是服务器端配置CORS策略,通过设置响应头控制跨域访问权限,无需改动前端代码,增强安全性;二是前端代理转发,如使用Nginx或Webpack DevServer在开发环境中转发请求绕过同源策略,简化开发流程但不适用于生产环境。生产环境下应采用服务器端CORS策略以确保安全稳定。
34 0
下一篇
无影云桌面