zoukankan      html  css  js  c++  java
  • 尝试在iOS上使用gRPC

    简介

    gRPC,google的远程过程调用框架,传输协议使用 HTTP2, 序列化协议使用 protobuf。
    gRPC 使用 HTTP2 传输协议传输 protobuf 序列化的二进制数据,有极高的效率、极低的资源占用率。
    github仓库地址:https://github.com/grpc/grpc,该仓库包含在共享C核心库src / core之上编写的多种语言(C++, Python, Ruby, Objective-C, PHP, C#)实现的gRPC库的源代码。
    gRPC的一些特性:

    • 简单的服务定义
    • 跨语言和平台工作
    • 快速启动并扩展
    • 双向流媒体以及身份验证集成

    使用GRPC几大核心步骤
    1)Defining a service 定义服务(在.proto文件中这个是和后台交互的主要协议)
    2)Generating grpc code 生成grpc代码
    3)Writing a server 服务端编写一定的服务提供给客户端使用(类似接口)
    4)Server implementation 服务的实现
    5)Writing a client 编写客户端代码(集成grpc)
    6)Calling an rpc 根据RPC协议(.proto文件约定的协议)进行代码(接口)调用
    优点:客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、和电池寿命。

    Objective-C Quick Start

    系统需求

    • 最小iOS版本为7.0,即iOS version >=7.0
    • OS X 10.11及以上,即OS X 10.11 >= 10.11

    前提条件
      1、CocoaPods >= 1.0 检查Cocoapods版本:pod –version
      $ sudo gem install cocoapods
      $ pod setup
      PS:CocoaPods是iOS开发、macOS开发中的包依赖管理工具,效果如Java中的Maven,nodejs的npm。
      2、Xcode >=7.2

      

      3、Homebrew
      $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
      PS:Homebrew是一款自由及开放源代码的软件包管理系统,用以简化macOS系统上的软件安装过程
      4、autoconf, automake, libtool, pkg-config
      $ brew install autoconf automake libtool pkg-config

    安装gRPC插件以及二进制库文件

    https://github.com/grpc/grpc下载gRPC源码,解压后进入grpc目录:
    $ make
    遇到错误:报错很简单,提示系统缺少cares包

    https://github.com/c-ares/c-ares下载cares包后,解压放在/grpc/third_party/cares/cares目录下,重新make,又报错了~,提示缺少OpenSSL,我勒个去,安装一个缺一个,何时是个头啊!grpc的third_party中只是给出了库的仓库地址,但是实际编译时需要的时third_party的全部源码文件。

    有效解决方法:Git源码编译(需要网络良好):
    $ git clone --recursive -b v1.23.0 https://github.com/grpc/grpc.git
    $ cd grpc
    $ git submodule update --init
    $ make
    $ [sudo] make install
    完成后会把gRPC的头文件安装在/usr/local/include,在程序中可直接包含使用,链接库则安装在/usr/local/lib中,供程序编译成功后链接使用。

     

    安装protoc编译器

    $ brew tap grpc/grpc
    $ brew install protobuf

    运行Server

    对于此示例应用程序,我们需要在本地计算机上运行的gRPC服务器。gRPC Objective-C API支持创建gRPC客户端,但不支持创建gRPC服务器。因此,我们在同一个存储库中构建并运行C ++服务器:
    $ cd examples/cpp/helloworld
    $ make
    $ ./greeter_server &

    C++服务端进程greeter_server运行起来了~

    运行Client

    1)生成客户端库和依赖项
    $ cd ../../objective-c/helloworld
    $ pod install

    2)运行客户端app
    $ open HelloWorld.xcworkspace
    这将使用Xcode打开应用程序项目。通过按Xcode窗口左上角的“运行”按钮,在iOS模拟器中运行应用程序。你可以检查main.m中的调用代码,并在Xcode的控制台中查看结果。代码将包含字符串“Objective-C”的HLWHelloRequest发送到本地服务器。服务器响应HLWHelloResponse,其中包含一个字符串“Hello Objective-C”,然后输出到控制台。

    恭喜!您刚刚使用gRPC成功运行了iOS模拟器客户端-C++服务器应用程序。

    iOS真机测试

    插入iphone,Xcode识别iphone,并选择为当前设备,配置工程签名信息,构建运行即可!

    由于我的Mac OS是在实体机的虚拟机中运行,而实体机使用的是有线光纤网络,和iphone手机所使用的无线网络不在同一个局域网内,所以无法网络联通。
    我的笔记本(Windows7 x64)使用的是无线网络,ip地址192.168.2.15,iphone手机ip地址192.168.2.231,是在同一个无线局域网内,可以在笔记本192.168.2.15上运行该gRPC C++ HelloWorld Server程序,但是需要Windows版本的gRPC程序,编译Windows版本的gRPC并使用其HelloWorld Demo程序可参考文章《grpc1.18.0 c++ windows visual studio 2017(vs2017)版本编译(入门)》以及《grpc1.18.0 c++ windows visual studio 2017(vs2017)版本Helloworld示例与解析》。

    我这里直接展示最终的结果:
    1) gRPC C++ HelloWorld Server

    注意:由于该服务端程序是使用VS2017 x64编译出来的,运行时需要zlib.dll以及VS2017的一些运行时库,所以需要安装VS2017才能确保运行(只安装C++开发部分组件即可)。
    一点小知识:服务器端的监听地址为"0.0.0.0:50051",0.0.0.0在服务器端它表示本机上的所有IPV4地址,如果一个服务有多个IP地址(192.168.1.2和10.1.1.12),那么我们如果设置的监听地址是0.0.0.0那么我们无论是通过IP192.168.1.2还是10.1.1.12都是可以访问该服务的。
    2) gRPC Object-C HelloWorld Client
    在Xcode中将连接的服务器地址由@"localhost.15:50051"修改为@"192.168.2.15:50051",之后选择所连接的iOS真机,运行!

    测试所使用的iOS真机,借来用的:

    恭喜!您刚刚使用gRPC成功运行了iOS真机客户端-C++服务器应用程序。

    参考

  • 相关阅读:
    生成大小字母以及数字混乱的6位验证码
    重写吃货联盟
    集合练习:登录注册功能
    出现并解决Navicat 报错:1130-host ... is not allowed to connect to this MySql server,MySQL
    mysql在linux的安装
    Spring4分别整合mongo2.X和3.0
    oracle数据库使用plsql(64位)时出现的问题
    spring的CXF远程服务
    spring的定时任务或者说自动任务
    jquery节点查询
  • 原文地址:https://www.cnblogs.com/MakeView660/p/11512519.html
Copyright © 2011-2022 走看看