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. iframe标签flash遮盖页面元素问题——wmode参数

    最近做项目过程中,遇到各种小问题,所以打算通过博客园来记录各问题的解决办法. 这篇的问题背景是这样子的:项目是用的AngularJS框架,在某个页面上用了wangEditor富文本编辑器插件(gith ...

  2. java线程condition

    子线程先执行一段代码,再主线程再执行一段代码,两个线程都循环执行50遍.用2个condition来实现,一个是子线程的condition,一个是主线程的condition,代码如下: package ...

  3. 分布式缓存-Memcached

    分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大 并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性).分布式缓存的核心技术包括首先是内存本身的管理问题,包括 ...

  4. Flask-Request对象属性

    Request属性 元属性 method host path environ headers data body中的内容 最安全 解析后 remote_addr args form values  a ...

  5. 编写高质量iOS代码的52个有效方法1-1

    一.使用向前声明(@class)的好处 1.有效减少编译器编译的时间: 2.有效避免循环引用: 二.字面量语法的好处 1.字面常量 精简.可用于所有数据类型,如: NSNumber *intNumbe ...

  6. nginx在linux下的目录结构

    配置文件目录 putty 下  whereis nginx /etc/nginx

  7. [ An Ac a Day ^_^ ] UVALive 2635 Housing Complexes 二分图最大匹配

    快要比赛了 看看原来做过的题 感觉这道题当时做的还是挺费劲的 所以发一下 题意: 一个土豪要建别墅 因为有的地区地方不够大 所以要拆屋子 每个地方的字母就是对应开发商的地盘 没有字母的就是自由土地 一 ...

  8. erlang 常用的计算长度函数

    1.size 可以计算元祖长度和标准binary长度 2.tuple_size 计算元祖长度 3.length 计算列表长度 4.byte_size 计算标准和非标准binary的长度 非标准 < ...

  9. log4j.properties文件的配置

    Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使用这三个组件可以轻松 ...

  10. linux服务器的操作禁忌

    1.linux系统是否支持开启SELINUX服务 我方linux系统的服务器不支持开启Selinux服务,如果开启了selinux服务,会导致系统异常并无法启动. 2.linux系统下能否开启NetW ...