zeroc-ice网络请求使用介绍

转载 2016年06月01日 15:17:07

官网:https://zeroc.com

官方Ice Builder pluginshttps://github.com/zeroc-ice/ice-builder-xcode

官方实例ice-demos-masterhttps://github.com/zeroc-ice/ice-demos

 

 

Demo实例下载


Ice网络请求使用介绍

1、安装IceIceTouchIceBuilder

1-1Ice的安装

使用brewbrew-http://brew.sh)安装(支持java则添加“—with-java”

终端安装命令:brew install ice,或 brew install ice --with-java


1-2IceTouch安装

使用brewbrew-http://brew.sh)安装

终端安装命令:

sudo xcode-select -s /Applications/Xcode-beta.app/Contents/Developer/(注意:Xcode-beta.app根据你自己安装的实际版本设置,如我自己的是Xcode.app

brew tap zeroc-ice/tap

brew install icetouch36 --build-from-source


1-3IceBuilder的安装

安装方法1

下载插件(下载地址:https://github.com/zeroc-ice/ice-builder-xcode),然后进行安装。

安装方法2

使用Alcatraz插件管理工具进行安装。


2、项目配置

2-1、添加framework

CFNetwork.framework

Security.framework

Foundation.framework

ExternalAccessory.framework

 

2-2Additional SDKs的配置,即IceTouch的配置

根据安装的Ice Touch所在路径设置(TARGETS-Build Settings-Architectures - Additional SDKs)。

比如在我自己的电脑上安装Ice Touch后,其所在路径为:硬盘->usr->local->Cellar->icetouch36->3.6.2->lib->IceTouch->Objc->iphones.skd,则设置为:/usr/local/Cellar/icetouch36/3.6.2/lib/IceTouch/ObjC/$(PLATFORM_NAME).sdk


2-3Ice Home的配置,即IceBuilder的配置

根据安装的Ice所在路径设置(TARGETS-Build Settings-Ice Builder - General Options-Ice Home)。

比如在我自己的电脑上安装Ice后,其所在路径为:硬盘->usr->local->Cellar->ice->3.6.2,则设置为:/usr/local/Cellar/ice/3.6.2

注意:安装后,必须在项目中添加xxx.ice文件才会显示Ice Builder选项,xxx.ice文件来自服务端同事提供。


2-4Code Signing Resource Rules Path的配置

配置(非必须 TARGETS-Build Settings-Code Signing - Code Signing Resource Rules Path):$(SDKROOT)/ResourceRules.plist



3、使用

3-1、特别说明,系统会在编译时自动根据xxx.ice文件生成对应的xxx.hxxx.m文件,该文件包含相应的数据格式类型、接口名称等。如xxx.ice文件为userservice.ice,则生成文件为userservice.huserservice.m

 

3-2、导入相关头文件,及对象定义

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. 头文件:  
  2. #import <objc/Ice.h>       // Ice  
  3. @protocol ICECommunicator; // Ice连接器  
  4. #import <userservice.h>  
  5. @protocol usersUserServicePrx;  
  6.   
  7. 对象定义:  
  8. id<ICECommunicator> communicator;  
  9. id<usersUserServicePrx> userServicePrx;  

3-3、根据服务器地址,及商品生成id<ICECommunicator>实例

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. 代码如下:  
  2. if (communicator == nil)  
  3. {  
  4.    ICEInitializationData *initData = [ICEInitializationData initializationData];  
  5.    initData.properties = [ICEUtil createProperties];  
  6.    // 属性设置  
  7.    // 方法1 文件配置方法  
  8.    // NSString *propertiesString = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"IceConfig.client"];  
  9.    // [initData.properties load:propertiesString];  
  10.    // [initData.properties setProperty:@"Ice.ACM.Client.Timeout" value:@"0"];  
  11.    // [initData.properties setProperty:@"Ice.RetryIntervals" value:@"-1"];  
  12.    // 方法2 setvlue设置  
  13.    [initData.properties setProperty:@"Ice.Default.Locator" value:@"IceGrid/Locator:tcp -h 192.168.3.164 -p 4061"];  
  14.    initData.dispatcher = ^(id<ICEDispatcherCall> call, id<ICEConnection> con) {  
  15.        dispatch_sync(dispatch_get_main_queue(), ^ {  
  16.            [call run];  
  17.        });  
  18.    };  
  19.    NSAssert(communicator == nil@"communicator == nil");  
  20.    communicator = [ICEUtil createCommunicator:initData];  
  21. }  


3-4、根据接口名称,实例化id<usersUserServicePrx>对象模型,并获取数据

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. 代码如下:  
  2.  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ {  
  3.     @try {  
  4.         ICEObjectPrx *base = [communicator stringToProxy:@"UserService"]; // UserService为接口名称  
  5.         base = [base ice_invocationTimeout:5000]; // 调用超时时间单位毫秒  
  6.         NSLog(@"base %@",[base ice_toString]);  
  7.         userServicePrx = [usersUserServicePrx checkedCast:base];  
  8.         NSLog(@"NSThread %@", [NSThread callStackSymbols]);  
  9.         usersMutableUserSeq *results = [userServicePrx queryUser:paraString]; // 返回结果数据  
  10.         NSLog(@"results %@", results);  
  11.     }  
  12.     @catch (ICEEncapsulationException *exception) {  
  13.         NSString *exceptionString = [NSString stringWithFormat:@"Invalid router: %@", exception.reason];  
  14.         dispatch_async(dispatch_get_main_queue(), ^ {  
  15.             [self exception:exceptionString];  
  16.         });  
  17.     }  
  18.     @catch (ICEException *exception) {  
  19.         dispatch_async(dispatch_get_main_queue(), ^ {  
  20.             NSLog(@"error=%@", [exception description]);  
  21.         });  
  22.     }  
  23.     @catch (NSException *exception) {  
  24.         dispatch_async(dispatch_get_main_queue(), ^ {  
  25.         NSLog(@"error=%@", exception.description);  
  26.         });  
  27.     }  
  28.  });  

3-5ice对象释放

[objc] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. if (communicator)  
  2.  {  
  3.     __block id<ICECommunicator> releaseCommunicator = communicator;  
  4.     communicator = nil;  
  5.     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{  
  6.         @try {  
  7.             [releaseCommunicator shutdown];  
  8.         }  
  9.         @catch (NSException *exception) {  
  10.    
  11.         }  
  12.         @finally {  
  13.             [releaseCommunicator destroy];  
  14.             releaseCommunicator = nil;  
  15.         }  
  16.     });  
  17.    
  18.     NSLog(@"释放 Ice 成功");  
  19.  }  
举报

相关文章推荐

zeroc-ice网络请求使用介绍

官网:https://zeroc.com 官方Ice Builder plugins:https://github.com/zeroc-ice/ice-builder-xcode 官方实例...

Zeroc Ice原理介绍

Ice介绍         Ice(Internet Communications Engine)是ZeroC公司的杰作,继承了CORBA的血统,是新一代的面向对象的分布式系统中间件。Ice是RP...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

ZeroC Ice IceGrid Node和IceGrid

绝大多数分布式系统都有一个共同特点,即分布在各个主机上的节点进程并不是完全独立的,而是彼此之间有相互联系和通信的。集群对集群中的节点有一些控制指令,如部署、启停或者调整某些参数等。IceGrid为了达...

AFN使用介绍

前三节,我详细的介绍了ASI的概念及基本使用。如果想了解的,请点击这里。由于AFN与ASI有很多相似的地方,所以我打算用一节的篇幅来介绍AFN。下载地址: https://github.com/AFN...

ICE - 企业使用的工具

ICE zeroc ice,简称ice,是指ZeroC公司的ICE(Internet Communications Engine)中间件平台。对于客户端和服务端程序的开发提供了很大的便利。 外文...

网络请求-AFNetworking3.0使用简介

第三方网络库可以为我们带来很多便捷。因为原生的网络请求,在使用的时候,管理复杂,容易出错,且如果自身水平不够高,写出来的效率也不高。目前有大量的程序员都认可第三方网络库,那我们又何乐而不为呢? ...

Android网络请求HTTP简单介绍

1、使用Http的Get方式读取网络数据 get方式: import android.app.Activity; import android.os.AsyncTask; import andro...

Android XUtils3.0 Http网络请求的介绍

说实话,对于xUtils,是我最近才用到的开发框架(也是刚接触),对于其功能不得不说,简化了很多的开发步骤,可以说是非常好的开发工具,但是其最近更新到3.0也没有解决加载自定义ImageView报错的...

快速入门ice--使用eclipse开发ice

 Zeroc ICE Quick Start 1             环境搭建 1.1    ...

Latex使用介绍

\\ 表示换行   \chapter{}   \section{}   \subsection{}   其中chap...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)