博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UE4 补丁更新(基于Http)
阅读量:20797 次
发布时间:2019-12-03

本文共 4130 字,大约阅读时间需要 13 分钟。

写在前面:本篇博客,算是我个人整理并亲自实现整个流程的吧,也就厚着脸说是原创了(尽管东拼西凑,实现了具体功能),具体本篇具体引用了谁的源码,亦有说明,关于文件服务器的配置也是烂大街的,就不再赘述了。

1,  文件服务器的搭建:

网上有各种各样的文件服务器,不可能罗列出所有(个人偏重于IIS和Tomcat),这里使用Apache Tomcat(版本7.0.82):

首先下载tomcat,链接地址为:

解压到指定的目录中,这里以我的文件夹为例:

E:\apache-tomcat-7.0.82

1,打开系统的环境变量设置页面:

添加环境变量:

变量名:CATALINA_BASE,变量值为Tomcat的解压路径,以我个人为例:E:\apache-tomcat-7.0.82

变量名:CATALINA_HOME,变量的值为:E:\apache-tomcat-7.0.82

然后在PATH变量中添加变量值:%CATALINA_HOME%\lib;%CATALINA_HOME%\bin;

(事实上,该变量可以一次性的配置到系统目录中,这样写可以更直观些吧)

2.启动cmd,输入:startup,出现tomcat的启动对话框说明配置成功。如果要在服务中把tomcat的服务设置成自动,如果你下载的是解压版tomcat,那么你就需要在cmd中输入service install命令,使得tomcat在服务列表中出现,再设置为自动启动。

3,关于Tomcat的网页测试:

你可以用一下路径测试,测试的结果为Apache tomcat的主页:

8080端口为Tomcat的默认端口,如果你在server.xml中设置过别的端口,那么你可以用自己的端口测试该页。

4,虚拟文件路径的配置:

首先你需要找到Tomcat的server.xml配置文件:

以个人的路径为例,它在:E:\apache-tomcat-7.0.82\conf\server.xml

找到<Host…..></Host>配置项,在</Host>之前添加一下内容:

<Context path=”/UE4Project” ></Context>

解释一下:docBase为你的服务器真实的硬盘路径,这里要存放以后你的服务器文件等,默认的在Tomcat的webapps目录下,这里设置虚拟路径,是为了满足自定义需要。

Path值是索引网络地址的虚拟路径。例如通过本地测试,你可以通过在浏览器中输入:

来查看服务器文件列表中的文件。

到此刻文件服务器的基本搭建完成了。

2,  UE4的HTTP代码部分:

这里使用了陌上花开w的文章,《UE4之HTTP请求》(感谢作者),文章地址:

首先改造他的代码,把它做成接口,手写或者通过Editor都行:

头文件内容:

#pragmaonce

#include"CoreMinimal.h"

#include"Http.h"

#include"HttpRequestTest.generated.h"

 

UINTERFACE(meta= (CannotImplementInterfaceInBlueprint))

classUHttpRequestTest :public UInterface

{

GENERATED_BODY()

};

classHOTUPDATE_API IHttpRequestTest

{

GENERATED_BODY()

public:

UFUNCTION(BlueprintCallable, Category =DownloadPak)

           virtual void Download(constFString& URL);

UFUNCTION(BlueprintCallable, Category =DownloadPak)

           virtual void Upload(constFString& URL, const FString& ContentString);

void OnRequestComplete(FHttpRequestPtrHttpRequest, FHttpResponsePtr HttpResponse, bool bSucceeded);

void OnRequestProgress(FHttpRequestPtrHttpRequest, int32 BytesSent, int32 BytesReceived);

};

Cpp实现文件:

  #pragma once

#include"HttpRequestTest.h"

#include"FileHelper.h"

#include"Paths.h"

 

voidIHttpRequestTest::Download(const FString& URL)

{

TSharedRef<IHttpRequest> HttpReuest =FHttpModule::Get().CreateRequest();

HttpReuest->SetURL(URL);

HttpReuest->SetVerb(TEXT("GET"));

HttpReuest->SetHeader(TEXT("Content-Type"),TEXT("application/x-www-form-urlencoded"));

HttpReuest->OnProcessRequestComplete().BindRaw(this,&IHttpRequestTest::OnRequestComplete);

HttpReuest->OnRequestProgress().BindRaw(this,&IHttpRequestTest::OnRequestProgress);

HttpReuest->ProcessRequest();

}

voidIHttpRequestTest::Upload(const FString& URL, const FString&ContentString)

{

TSharedRef<IHttpRequest> HttpReuest =FHttpModule::Get().CreateRequest();

HttpReuest->SetURL(URL);

HttpReuest->SetVerb(TEXT("POST"));

HttpReuest->SetHeader(TEXT("Content-Type"),TEXT("application/x-www-form-urlencoded"));

HttpReuest->SetContentAsString(ContentString);//也可以用SetContent,只不过参数要换成TArray<uint8>

HttpReuest->OnProcessRequestComplete().BindRaw(this,&IHttpRequestTest::OnRequestComplete);

HttpReuest->OnRequestProgress().BindRaw(this,&IHttpRequestTest::OnRequestProgress);

HttpReuest->ProcessRequest();

}

voidIHttpRequestTest::OnRequestComplete(FHttpRequestPtr HttpRequest,FHttpResponsePtr HttpResponse, bool bSucceeded)

{

if (!HttpRequest.IsValid() ||!HttpResponse.IsValid())

{

           return;

}

else if (bSucceeded &&EHttpResponseCodes::IsOk(HttpResponse->GetResponseCode()))

{

           //如果是下载请求,可通过这段代码将文件保存

           FString Filename =FPaths::GetCleanFilename(HttpRequest->GetURL());

           FString tempDir = FPaths::GameDir() +"/Content/Paks/";

           FFileHelper::SaveArrayToFile(HttpResponse->GetContent(),*FString::Printf(TEXT("%s%s"), *tempDir, *Filename));

}

}

voidIHttpRequestTest::OnRequestProgress(FHttpRequestPtr HttpRequest, int32BytesSent, int32 BytesReceived)

{

}

注意事项:你需要在项目中的Build.cs文件里加入以下Module:”Http”,这篇文章是在UE4 4.17.2的正式版本下编写的,如果你看到这篇文章时,已经距离写这篇文章很久了,那么你需要考虑一下当前的头文件,模块及函数的变化情况。

接下来,你需要编译项目,并在Editor里创建蓝图,并继承自该接口,如果无法继承,你可以通过源码的方式创建Actor,并继承该接口。

3,  在蓝图里调用函数Download,并在Url里填写文件路径及文件名:

例如,你的项目打的pak为:HotUpdate-WindowsNoEditor_0_P.pak,那么你在url里可以这样写:,

4,  增量打包,具体怎么实施,参见其他的增量打包部分(官方亦有说明)。

然后把增量包放到服务器的硬盘路径里,即文件服务器的虚拟目录里:

本篇为:docBase=”E:\ServerFile\UE4\”(前面的文件服务器的配置里提到过)

5,运行你的客户端,并点击测试下载按钮,然后等下载完毕后,关闭客户端,并重新运行,就可以看到执行的结果了。更细致的操作,需要磨合,当然,作为一个下载Demo,本篇已经可以打了。

转载地址:http://vkuubk.baihongyu.com/

你可能感兴趣的文章
分布式日志追踪的最佳实践1
查看>>
Rabbitmq集群高可用测试
查看>>
RabbitMQ之队列与消息持久化
查看>>
Hello Docker入门实例
查看>>
When should we use PUT and when should we use POST?
查看>>
Rest实践之POST+json总结
查看>>
每个平淡的现在都是你期望的未来
查看>>
Rabbitmq 消息堆积测试
查看>>
Java callback
查看>>
电商系统学习笔记之redis单线程架构以及IO通信模型
查看>>
Linux awk 命令 说明 .
查看>>
电商系统学习笔记之Netty架构分析
查看>>
linux环境变量修改和设置
查看>>
Linux shell参数
查看>>
电商系统系统笔记之select,poll,epoll深入理解
查看>>
电商系统学习笔记之nginx和负载均衡策略
查看>>
Linux wc命令详解
查看>>
UML关系(泛化,实现,依赖,关联(聚合,组合))
查看>>
SIPp
查看>>
cut命令学习
查看>>