基于VS2022在Windows上首次尝试开发C++ gRPC服务端和客户端的详细步骤
0. 安装vcpkg 123https://github.com/microsoft/vcpkg.git.\bootstrap-vcpkg.bat vcpkg --version 1.grpc安装与编译 1vcpkg install grpc:x64-windows 2.protocbuf安装与编译 1vcpkg install protobuf protobuf:x64-windows 安装后,您可以在文件夹 <vcpkg_installed_path>\packages 下的 vcpkg 目录中找到已安装的软件包。 为了使软件包在系统范围内可用,您需要使用命令: 1vcpkg integrate install 注:以上安装完大约47GB 1. 创建解决方案与项目 打开VS2022 → 创建新项目 → 选择 “空项目” ,分别创建服务端(如gRPCServer)和客户端(如gRPCClient)项目 右键解决方案 → 添加 → 新建项 → “头文件(.h)” 和 “源文件(.cpp)” ,分别用于服务端和客户端代码 2....
GRPC 快速入门
1. 背景介绍 gRPC全称Google Remote Procedure Call. 它是一种基于Protobuf buffer 格式的高效的通讯协议。与许多 RPC 系统一样,gRPC 基于定义服务的理念,指定可以远程调用的方法及其参数和返回类型。在服务器端,服务器实现此接口并运行 gRPC 服务器以处理客户端调用。在客户端,客户端具有一个存根(在某些语言中称为客户端),它提供与服务器相同的 方法。 2. 快速入门 安装 cmake 您需要 cmake 的 3.13 版或更高版本。请按照以下说明进行安装 Linux 1sudo apt install -y cmake macOS 1brew install cmake 安装其他必需工具 Linux 1sudo apt install -y build-essential autoconf libtool pkg-config macOS 1brew install autoconf automake libtool pkg-config 克隆 grpc 仓库 设置安装路径 123export...
gRPC实现第一个C++服务器
1. 前言 本章节将实现C++版本的个人注册页面的gRPC服务器 更多基础知识可以参考上一节: GRPC 快速入门 2. 定义服务 要定义服务,需要在login.proto文件中指定一个名为service的内容,另外我们还需要定义一个LoginInfo的消息体用来传递信息 12345678910111213141516171819202122syntax = "proto3"; //指定版本信息,不指定会报错package tutorial; //package声明符,用来防止不同的消息类型有命名冲突// 注册消息体message LoginInfo { string usrname = 1; string password = 2;}// login responsemessage LoginResponse { // 状态码,0表示成功 int32 status_code = 1; // 返回信息,包含成功或错误描述 string message = 2;}//...
Windows安装vcpkg教程(VS2022)
一、关于vcpkg vcpkg 是一个开源的 C++ 包管理工具,旨在简化 C++ 库的管理、安装和集成。它帮助开发者轻松地将第三方 C++ 库集成到自己的项目中,并提供了一种跨平台的方式来管理和分发 C++ 库。vcpkg 支持 Windows、Linux 和 macOS,能够自动处理库的下载、构建和依赖关系,极大地简化了 C++ 开发中的外部库管理问题。 vcpkg与其它管理工具的对比: vcpkg vs Conan: Conan 是另一个流行的 C++ 包管理工具,旨在简化 C++ 项目的依赖管理。Conan 提供更强大的跨平台支持,支持与多种构建系统(如 CMake、Visual Studio、Make 等)集成。 vcpkg 更注重与 Visual Studio 和 CMake 的无缝集成,并提供了更为简单的命令行界面和安装方式。 差异:vcpkg 主要用于管理由 Microsoft 和其他开源社区提供的 C++ 库,并且通常支持 Windows 和 Linux/macOS 平台。而 Conan...
UE/虚幻 蓝图实现通过http获取数据(以高德地图API为例)&Json格式数据的读取
准备工作 安装插件_VictoryPlugin_与_vaRest_ __VictoryPlugin插件分享: 链接: https://pan.baidu.com/s/1w4CBf6xK25U0HHzolAFMyQ?pwd=8888 提取码:...
UEC++ 会话暴露给蓝图 ,无法识别会话相关类型
在实在联网功能时,我们常常需要获取到会话类型,当我们需要在蓝图中使用这些类型的时候。如果我们直接在头文件中直接使用会话相关类型在编译时就会报错 1Unrecognized type “你所引用的类” - type must be a UCLASS,USTRUCT or UENUM 这时候就需要利用结构体对需要使用的会话类型进行一个包装,具体的实现方式我们可以借鉴(对,是借鉴不是抄) BlueprintSession...
UE/虚幻 Widget Blueprint could not be loaded because it derives from an invalid class
Widget Blueprint could not be loaded because it derives from an invalid class 蓝图控件无法加载,因为它来自无效的类 生成节点部件必须创建一个类 这是我在打包一个含自定义插件的项目时出现的问题 出现问题的原因:在打开编译器的时候,插件是默认在编译器加载完之后再去加载插件的 解决办法: 在.uplugin文件中将 1"LoadingPhase" : "Default" 改成 1"LoadingPhase" : "PreDefault" 意思是将插件的加载顺序提到编译器加载之前,这样就可以解决这个问题了。
UE/虚幻 通过在线子系统访问线上服务(OnlineSubsystem/OnlineSubsystemSteam)
我们通过Steam访问线上服务不知道怎么配置的可以看我的另一篇 [UE /虚幻 Steam配置] 配置完成后在角色类的头文件中添加一个变量用于存储获取到的会话接口 123456public: // 指向在线会话接口的指针 // #include "Interfaces/OnlineSessionInterface.h" 添加头文件 IOnlineSessionPtr OnlineSessionInterface; // IOnlineSessionPtr 就是 TSharedPtr<class IOnlineSession, ESPMode::ThreadSafe> // TSharedPtr<class IOnlineSession, ESPMode::ThreadSafe> OnlineSessionInterface; 然后在角色类的构造函数中获取到在线子系统,并通过在线子系统获取会话接口,然后打印出在线子系统的名称 12345678910// #include...
UE /虚幻 Steam配置
第一步:在项目插件中,打开Online Subsystem Steam 第二步:打开项目C++文件,在 .Build.cs文件下的公共依赖模块名称中添加 OnlineSubsystem 和 OnlineSubsystem 第三步:找到官方文档的OnlineSubsystemSteam的DefaultEngine.ini中需要添加的配置,并找到当前项目文件夹内的该文件,将配置内容添加上去,其中 SteamDevAppId 既开发者应用ID需要自己去Steam申请,这里480是Steam“太空战”使用的开发ID 第四步:关闭项目编译器和VisualStudio,找到项目文件下三个文件,将其删除后重新生成VisualStudio文件 以上就完成了UE中的Steam配置
UE/虚幻 简单局域网连接
蓝图实现 创建一个联机地图,我命名为 “ onlineMap01 ” ,然后在角色蓝图中创建两个按钮事件,一个用于打开地图,另一个用于加入创建的地图 OpenLevel的options中的listen是指定监听服务器,简单来说就是将当前端设为服务端 可以利用UE编辑器直接开两个标准窗口测试,或者打包到同局域网下进行测试,不过如果是不同电脑,则需要修改ip地址,一端先按1键,创建地图,并将当前端设置为监听服务器,然后通过另一端按2键加入该地图 UEC实现 创建一个联机地图,我命名为 “ onlineMap01 ” ,然后去到角色类中,创建相关函数进行开启服务和加入服务 这里有两种方式加入服务 第一种是通过OpenLevel函数利用ip加入 第二种是通过获取当前玩家的玩家控制器,在利用玩家控制器的Client Travel 函数通过ip加入 头文件,申明所需要的自定义函数 123456UFUNCTION(BlueprintCallable) void OpenOnlineMap();UFUNCTION(BlueprintCallable) void...








