C++实现Ice基本通信实例
Ice简介
Ice是ZeroC的开源通信产品,是一个面向对象的中间件,全程为:The Internet Communications Engine。其作为一款优秀的RPC工具,不仅性能强劲,而且支持多平台多语言开发,即服务端和客户端使用到的开发语言可以是不同的。Ice让我们能够以最小的代价去构建分布式应用,只需要专注业务逻辑即可,底层的通讯逻辑完全由ICE帮我们封装实现。
另一方面,Ice也算是一款老牌RPC框架,其已经有十多年的沉淀,不仅支持服务器端的RPC调用,也支持移动设备,使得开发起来更为方便。其客户端与服务端的架构如下:
该架构图显示应用之间使用Ice作为中间件平台,客户端及服务的的应用都是由应用代码即Ice的库代码混合组成的,且两者使用的开发语言甚至都不同。上述代理是根据Slice定义的ice文件实现,它提供了一个向下调用的接口,提供了数据的序列化与反序列化。Ice的核心部分提供了客户端与服务端的网络连接等核心通信功能,以及其他的网络通信功能的实现及可能问题的处理。
VS新建项目
VS项目安装Ice
用于 Visual Studio 2017 (v141) 的 Ice C++ SDK。
网址(Ice与VS对应关系):https://zeroc.com/downloads/ice/3.7/cpp
网址(nuget):https://www.nuget.org/packages/zeroc.ice.v141
注意:VS版本与Ice版本的对应关系。
在VS的程序包管理器控制台命令行安装
官网查看命令行
安装命令:
Install-Package zeroc.ice.v141 -Version 3.7.6
执行安装
安装后位置
VS项目安装Ice Builder for MSBuild
为在 MSBuild 项目中编译 Slice 源文件(.ice 文件)提供支持。
网址:https://www.nuget.org/packages/zeroc.icebuilder.msbuild
在VS的程序包管理器控制台命令行安装,查看安装命令。
安装命令:
Install-Package zeroc.icebuilder.msbuild -Version 5.0.7
执行安装
安装后位置
VS安装Ice Builder for Visual Studio
Ice Builder 管理将 Slice (.ice) 文件编译为 C++ 和 C#。Ice Builder for Visual Studio 是一个 Visual Studio 扩展,它为您的 C++ 和 C# 项目配置 Ice Builder for MSBuild,所有这些都在 Visual Studio IDE 中。 它充当 Ice Builder for MSBuild 的前端:所有构建时处理都由 Ice Builder for MSBuild 执行。
网址:https://marketplace.visualstudio.com/items?itemName=ZeroCInc.IceBuilder
双击IceBuilder.vsix文件运行安装。
编写slice中间件
在筛选器Slice Files新建slice中间件文件Printer.ice
1 | // |
编译slice生成通用文件
在VS的程序包管理器控制台进入到Printer.ice所在路径,执行命令生成通用文件。
执行命令:
slice2cpp Printer.ice
生成c++中间通用头文件和源文件。
添加通用文件到VS项目。
IceServer实现
1 |
|
更改Printer.cpp
#include <Printer.h>
更改为
#include “Printer.h”
附标准引用#include <Printer.h>实现方式
slice生成中间文件通过VS生成解决方案实现,不运行命令行实现。
增加项目配置
配置内容:$(SolutionDir)generated
运行生成解决方案,项目头文件和源文件会自动增加slice文件生成的通用文件。
正文引用:
#include <Printer.h>
运行项目,即成。
IceClient实现
新建项目,安装项目依赖如上,只安装ice和Ice Builder for MSBuild。
可直接使用IceServer生成的通用中间文件,copy到项目目录,并添加到项目,即可。
客户端code:
1 |
|
运行
先运行IceServer项目,然后运行IceClient项目。效果如下:
运行失败某解决方案
若项目运行失败,修改项目配置管理器平台为活动(win32)。