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的方法---客户端控制服务端的负载均衡的更多相关文章

  1. [Java聊天室server]实战之五 读写循环(服务端)

    前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...

  2. Photon Server初识(六) --- 客户端与服务端消息传递

    前一章客户端与服务端连接成功,现在需要前后端进行数据传递. 一.前端发送消息.在项目Scripts目录中新建脚本 TestSer.cs.并挂载到相机上 二.客户端发送数据给服务端.编辑客户端代码 Te ...

  3. Photon Server 实现注册与登录(四) --- 服务端响应登陆和注册

    前面已经整理过了服务端代码,MyGameServer.cs 和 ClientPeer.cs 对请求和响应进行了拆分.接下来处理对前端的响应 一.响应登陆请求 之前整理中,响应前端请求主要在类Clien ...

  4. Photon Server 实现注册与登录(二) --- 服务端代码整理

    一.有的代码前端和后端都会用到.比如一些请求的Code.使用需要新建项目存放公共代码. 新建项目Common存放公共代码: EventCode :存放服务端自动发送信息给客户端的code Operat ...

  5. Photon Server 实现注册与登录(五) --- 服务端、客户端完整代码

    客户端代码:https://github.com/fotocj007/PhotonDemo_Client 服务端代码:https://github.com/fotocj007/PhotonDemo_s ...

  6. Zeroc Ice 负载均衡之Icegrid simple

    最近学习Icestorm的replicated例子,在本地计算机上面跑通了,但在两台机器上(一台服务器192.168.0.113,一台客户端192.168.0.188),怎么都跑不通.上网求助,大家给 ...

  7. SVN--VisualSVN server 服务端和 TortoiseSVN客户端的基础使用

    前言 在上一文http://www.cnblogs.com/wql025/p/5177699.html中,我们讲到了使用SVN的第一步,即下载.安装SVN的服务端软件--VisualSVN serve ...

  8. 利用Nginx构建负载均衡server

    大家都知道.一个域名相应一个IP地址,而一个WebSite则相应一个IP地址上相应port服务的应用程序(或位置).而大型站点的并发訪问量很大,这些站点是怎样在一台Webserver上实现负载均衡的呢 ...

  9. LVS(Linus Virtual Server):三种负载均衡方式比较+另三种负载均衡方式

    还有个姊妹篇也可以参考这个文章:六大Web负载均衡原理与实现 什么是LVS (Linux Virtual Server)?   首先简单介绍一下LVS (Linux Virtual Server)到底 ...

随机推荐

  1. github 上传文件

    1.删除项目 2.  包管理器初始化  npm  init name  必填项   后面可一直回车 最后选择yes 3.建立本地仓储 在git bash 中输入命令  git  init 4. 添加 ...

  2. python 基础学习2--编程

    python编程的步骤为: __name__ 指示模块如何被加载:如果模块被导入,__name__的值是模块的名称,如果模块被直接执行,__name__的值是main 变量不用进行声明,直接赋值:无需 ...

  3. hdfs格式化hadoop namenode -format错误

    在对HDFS格式化,执行hadoop namenode -format命令时,出现未知的主机名的问题,异常信息如下所示: [shirdrn@localhost bin]$ hadoop namenod ...

  4. Nginx将项目配置在子目录

    问题:一个完整的项目需要整合在另外一个项目中,作为一个子模块存在 有两个项目prject1 根目录/www/project1与project2 /www/project2,现在是想将probject1 ...

  5. gitignore git提交忽略文件

    从网上找的git忽略文件挺前面的,现在记录下来,以备后用: tomsuite.xml **pom.xml.releaseBackup release.properties gen */seed.txt ...

  6. 第九十八节,JavaScript语法、关键保留字及变量

    JavaScript语法.关键保留字及变量 学习要点: 1.语法构成 2.关键字保留字 3.变量 任何语言的核心都必然会描述这门语言最基本的工作原理.而JavaScript的语言核心就是ECMAScr ...

  7. Sass入门:第三章

    1.声明变量 Sass声明变量以美元符号"$"开头.例如: $width : 300px; 上面的例子中,Sass的变量包括三个部分: (1)声明变量的符号"$" ...

  8. stack(STL)

    //Stack STL //在STL中,栈是以别的容器作为底部结构,再将 //接口改变,使之符合栈的特性 //一共5个常用操作函数 //构造析构 stack<Elem>c; //build ...

  9. hellobruce

  10. 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 ...