ice使用过程遇到的问题
1 设置代理超时时间ice_timeout
ICE的每个连接都有两个超时时间:ice_timeout、ice_connectiontimeout,分别对应消息的超时时间和连接建立
的超时时间,可以通过在代理上调用上述方法来设置超时,也可以通过属性Ice.Override.Timeout、Ice.Override.ConnectTimeout
来强制改变超时时间。
示例如下,
MyAdapter.Endpoints=tcp
–p 9999 –t 5000
base = __ice_runtime.stringToProxy(settings.CONF_DATA_CENTER_SERVERS).ice_timeout(500) //获得代理的超时时间
在客户端,我们使用对象代理进行远程调用,就如它们就在本地一样。但有时,网络问题还是要考虑的,于是Ice的对象代理提供了几个包装方法,以支持一些网络特性:
ice_timeout方法,声明为:Ice::ObjectPrx
ice_timeout(int) const;返回一个超时代理,当在指定的时间(单位毫秒)内没有得到服务器端响应时,操作终止并抛出Ice::TimeoutException异常。
示例代码:
- Filesystem::FilePrx myFile = ...;
- FileSystem::FilePrx timeoutFile
- = FileSystem::FilePrx::uncheckedCast(
- myFile->ice_timeout(5000));
- try {
- Lines text = timeoutFile->read(); // Read with timeout
- } catch(const Ice::TimeoutException &) {
- cerr << "invocation timed out" << endl;
- }
- Lines text = myFile->read(); // Read without timeout
1设置定位服务缓存超时时间
Ice.Default.LocatorCacheTimeout
对于定位服务,可以缓存 代理对应的端点地址,这样可以减少定位请求。
Description
Specifies the default locator cache timeout
for indirect proxies. If num is set to a value larger than zero, locator cache entries older than num seconds are ignored. If set to 0, the locator cache is not used. If set to -1, locator cache entries
do not expire.
Once a cache entry has expired, the Ice run time performs a new locate request to refresh the cache before sending the next invocation; therefore, the invocation is delayed until the run time has refreshed the entry. If you set Ice.BackgroundLocatorCacheUpdates to
a non-zero value, the lookup to refresh the cache is still performed but happens in the background; this avoids the delay for the first invocation that follows expiry of a cache entry.
Ice.BackgroundLocatorCacheUpdates
2 报异常IceUtil::NullHandleException:
Null Smart Pointers
A null smart pointer contains a null C++ pointer to its underlying instance. This means that if you attempt to dereference a null smart pointer, you get an IceUtil::NullHandleException:
TimeOfDayPtr tod; // Construct null handle
try {
tod->minute = 0; // Dereference null handle
assert(false); // Cannot get here
} catch (const IceUtil::NullHandleException&) {
; // OK, expected
} catch (...) {
assert(false); // Must get NullHandleException
}
Default constructor
You can default-construct a proxy handle. The default constructor creates a proxy that points nowhere (that is, points at no object at all). If you invoke an operation on such a null proxy, you get an IceUtil::NullHandleException:
try {
SimplePrx s; // Default-constructed proxy
s->op(); // Call via nil proxy
assert(0); // Can't get here
} catch (const IceUtil::NullHandleException&) {
cout << "As expected, got a NullHandleException" << endl;
}
ice使用过程遇到的问题的更多相关文章
- 试用mysql的infobright引擎
海量数据分析处理,向来比较头疼费劲,特别是项目资金不允许的情况下,都是优先考虑开源软件,2007使用mysql,2009年尝试greenplum(公司最终选用oracle),20 ...
- iOS下WebRTC音视频通话(一)
在iOS下做IM功能时,难免都会涉及到音频通话和视频通话.QQ中的QQ电话和视频通话效果就非常好,但是如果你没有非常深厚的技术,也没有那么大的团队,很难做到QQ那么快速和稳定的通话效果. 但是利用We ...
- 转:WebRTC技术及应用2 – NAT穿越技术的使用
评:webrtc自带的打洞,穿透协议. 转: http://www.unclekevin.org/?p=924 959 views WebRTC技术及应用2 – NAT穿越技术的使用 发表回复 (题图 ...
- android灭屏后调用binder通讯竟然影响了socket的POLL_OUT事件,怪事。
当你的android在灭屏(休眠)时分派(dispatch) Ice调用过程中,如果创建了新的进程,你的响应将不会预期那样工作,尽管你已经调用 ice_response或 ice_exception, ...
- 网络协议之:基于UDP的高速数据传输协议UDT
目录 简介 UDT协议 UDT的缺点 总结 简介 简单就是美.在网络协议的世界中,TCP和UDP是建立在IP协议基础上的两个非常通用的协议.我们现在经常使用的HTTP协议就是建立在TCP协议的基础上的 ...
- c++ primer plus 第6版 部分二 5- 8章
---恢复内容开始--- c++ primer plus 第6版 部分二 5- 章 第五章 计算机除了存储外 还可以对数据进行分析.合并.重组.抽取.修改.推断.合成.以及其他操作 1.for ...
- (转)NAT与NAT穿越学习总结--ICE过程讲的不错
转:http://cgs1999.iteye.com/blog/1994072 1.引言网络地址转换(Network Address Translation,简称NAT)是一种在IP分组通过路由器或防 ...
- ice grid 完整部署过程
待补充 一 理论准备 一个IceGrid集群有一个registry(注册表,用于定位)和多个node组成. IceGrid配置包括集群配置和应用配置: config.grid是集群配置,配置Regis ...
- webrtc进阶-信令篇-之三:信令、stun、turn、ice
webRTC支持点对点通讯,但是webRTC仍然需要服务端: . 协调通讯过程中客户端之间需要交换元数据, 如一个客户端找到另一个客户端以及通知另一个客户端开始通讯. . 需要处理NAT(网 ...
随机推荐
- 32bit程序在64bit操作系统下处理重定向细节(转自http://bbs.pediy.com/showthread.php?t=89054)
1. 64bit操作系统的重定向机制以及目的 在64bit操作系统中,为了无缝兼容32bit程序的运行,64bit的Windows操作系统采用重定向机制.目的是为了能让32bit程序在64bit的操作 ...
- sql 关于dblink和多条update、insert事务回滚写法
在存储过程的编写中难免会遇到调用同库他人的proc和跨库调用proc,还有一个proc中有多条对多表进行写入和修改的语句.那么就会用到tran. 如果我们在不写try的情况下就要对每个insert,u ...
- phpQuery 无法解析 html 结构
有时候解析一段 HTML 代码时 phpQuery 无法解析原因: 可能是缺少类似下面的 meta 信息,在带解析的字符串任意位置添上即可 : <meta http-equiv="Co ...
- ACdream 1064 完美数
数位dp. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #incl ...
- UVa 1354 Mobile Computing | GOJ 1320 不加修饰的天平问题 (例题 7-7)
传送门1(UVa): https://uva.onlinejudge.org/external/13/1354.pdf 传送门2(GOJ): http://acm.gdufe.edu.cn/Probl ...
- CSS3秘笈复习:第九章&第十章
第九章 1.和链接有关的伪类: (1):link,未访问过的链接 (2):visited,已访问过的链接 (3):hover,鼠标悬停链接 (4):active,单击链接时 这四种方式一定要严格按上面 ...
- Django的使用
Django使用介绍 1.MTV Django中的MTV分别表示models.templates和views. models文件主要定义数据库的连接. templates文件可以放一些html的模版. ...
- linux命令 time
功能:用于计算命令执行的世界 语法: time command 例如: hbg@root:~/dl$ time ls111 apple.sh b.txt duplic ...
- Marble 添加自定义Layer
#include <marble/MarbleWidget.h> #include <marble/MarbleMap.h> #include <marble/Marbl ...
- Gentoo: !!! existing preserved libs问题
问题描述 !!! existing preserved libs: >>> package: media-libs/libmng-2.0.2-r1 * - /usr/lib/libm ...