ice调通过iceReplica用所有server instance的方法---客户端控制服务端的负载均衡
I
- 使用此方法,可以增量的通知Ice服务配置的改变,刷新每个服务进程的数据
- 可以手动控制客户端调用的负载均衡,客户端程序决定将请求发往那个进程
上代码:
import logging
import Ice,IceGrid
import time
from company.service import Handler, HandlerPrx REC_LOCATOR = "****************************"
ICE_LOCATOR_CACH_TIMEOUT = "300" def init_ice():
global __rec, ice, base, communicator, rec_replicas
p = Ice.createProperties()
p.setProperty("Ice.Default.Locator", REC_LOCATOR)
p.setProperty("Ice.Default.LocatorCacheTimeout", ICE_LOCATOR_CACH_TIMEOUT)
p.setProperty("Ice.BackgroundLocatorCacheUpdates", "1")
id = Ice.InitializationData()
id.properties = p ic = Ice.initialize(id)
base = ic.stringToProxy("*********/Query")
q = IceGrid.QueryPrx.checkedCast(base) # ICE initialize
while(1):
communicator = Ice.initialize(id)
#logging.warn("-------------initing ICE------------------")
try:
base = communicator.stringToProxy("recommend")
__rec = HandlerPrx.uncheckedCast(base)
print "replicated proxy: ", __rec
rec_replicas = q.findAllReplicas(__rec)
print rec_replicas
if not __rec:
raise RuntimeError("Invalid Ice proxy")
logging.warn("-------init completed, proxy is %s--------"%__rec)
break
except Exception, e:
logging.error("CAN'T CONNECT TO ice proxy, retrying...%s", str(e))
try:
communicator.destroy()
except:
pass
base = None
__rec = None
time.sleep(1)
continue if __name__ == "__main__":
init_ice()
print "normal call", __rec.getResponse("adsfadsf")
for rr in rec_replicas:
adapter_id = rr.ice_getAdapterId()
print "==================", adapter_id
rrt = HandlerPrx.checkedCast(rr)
print "each call", rrt, rrt.getResponse("xxx")
- 执行之后,服务端接受到的log如下,可以看出每个进程分别执行了一次(开启了4个进程)
[INFO 2012-12-19 16:27:50,327 @ 435028] - Request: xxx
[WARN 2012-12-19 16:27:50,327 @ 435028] - parse input json error!
[INFO 2012-12-19 16:27:50,328 @ 435035] - Request: xxx
[WARN 2012-12-19 16:27:50,328 @ 435035] - parse input json error!
[INFO 2012-12-19 16:27:50,330 @ 435045] - Request: xxx
[WARN 2012-12-19 16:27:50,330 @ 435045] - parse input json error!
[INFO 2012-12-19 16:27:50,331 @ 435050] - Request: xxx
[WARN 2012-12-19 16:27:50,331 @ 435050] - parse input json error!
ice调通过iceReplica用所有server instance的方法---客户端控制服务端的负载均衡的更多相关文章
- [Java聊天室server]实战之五 读写循环(服务端)
前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...
- Photon Server初识(六) --- 客户端与服务端消息传递
前一章客户端与服务端连接成功,现在需要前后端进行数据传递. 一.前端发送消息.在项目Scripts目录中新建脚本 TestSer.cs.并挂载到相机上 二.客户端发送数据给服务端.编辑客户端代码 Te ...
- Photon Server 实现注册与登录(四) --- 服务端响应登陆和注册
前面已经整理过了服务端代码,MyGameServer.cs 和 ClientPeer.cs 对请求和响应进行了拆分.接下来处理对前端的响应 一.响应登陆请求 之前整理中,响应前端请求主要在类Clien ...
- Photon Server 实现注册与登录(二) --- 服务端代码整理
一.有的代码前端和后端都会用到.比如一些请求的Code.使用需要新建项目存放公共代码. 新建项目Common存放公共代码: EventCode :存放服务端自动发送信息给客户端的code Operat ...
- Photon Server 实现注册与登录(五) --- 服务端、客户端完整代码
客户端代码:https://github.com/fotocj007/PhotonDemo_Client 服务端代码:https://github.com/fotocj007/PhotonDemo_s ...
- Zeroc Ice 负载均衡之Icegrid simple
最近学习Icestorm的replicated例子,在本地计算机上面跑通了,但在两台机器上(一台服务器192.168.0.113,一台客户端192.168.0.188),怎么都跑不通.上网求助,大家给 ...
- SVN--VisualSVN server 服务端和 TortoiseSVN客户端的基础使用
前言 在上一文http://www.cnblogs.com/wql025/p/5177699.html中,我们讲到了使用SVN的第一步,即下载.安装SVN的服务端软件--VisualSVN serve ...
- 利用Nginx构建负载均衡server
大家都知道.一个域名相应一个IP地址,而一个WebSite则相应一个IP地址上相应port服务的应用程序(或位置).而大型站点的并发訪问量很大,这些站点是怎样在一台Webserver上实现负载均衡的呢 ...
- LVS(Linus Virtual Server):三种负载均衡方式比较+另三种负载均衡方式
还有个姊妹篇也可以参考这个文章:六大Web负载均衡原理与实现 什么是LVS (Linux Virtual Server)? 首先简单介绍一下LVS (Linux Virtual Server)到底 ...
随机推荐
- github 上传文件
1.删除项目 2. 包管理器初始化 npm init name 必填项 后面可一直回车 最后选择yes 3.建立本地仓储 在git bash 中输入命令 git init 4. 添加 ...
- python 基础学习2--编程
python编程的步骤为: __name__ 指示模块如何被加载:如果模块被导入,__name__的值是模块的名称,如果模块被直接执行,__name__的值是main 变量不用进行声明,直接赋值:无需 ...
- hdfs格式化hadoop namenode -format错误
在对HDFS格式化,执行hadoop namenode -format命令时,出现未知的主机名的问题,异常信息如下所示: [shirdrn@localhost bin]$ hadoop namenod ...
- Nginx将项目配置在子目录
问题:一个完整的项目需要整合在另外一个项目中,作为一个子模块存在 有两个项目prject1 根目录/www/project1与project2 /www/project2,现在是想将probject1 ...
- gitignore git提交忽略文件
从网上找的git忽略文件挺前面的,现在记录下来,以备后用: tomsuite.xml **pom.xml.releaseBackup release.properties gen */seed.txt ...
- 第九十八节,JavaScript语法、关键保留字及变量
JavaScript语法.关键保留字及变量 学习要点: 1.语法构成 2.关键字保留字 3.变量 任何语言的核心都必然会描述这门语言最基本的工作原理.而JavaScript的语言核心就是ECMAScr ...
- Sass入门:第三章
1.声明变量 Sass声明变量以美元符号"$"开头.例如: $width : 300px; 上面的例子中,Sass的变量包括三个部分: (1)声明变量的符号"$" ...
- stack(STL)
//Stack STL //在STL中,栈是以别的容器作为底部结构,再将 //接口改变,使之符合栈的特性 //一共5个常用操作函数 //构造析构 stack<Elem>c; //build ...
- hellobruce
- HDU 3835 R(N)(枚举)
题目链接 Problem Description We know that some positive integer x can be expressed as x=A^2+B^2(A,B are ...