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)到底 ...
随机推荐
- File对象的常用方法
File对象不仅可以表示文件,还可以表示目录,源码注释是这么说的:An abstract representation of file and directory pathnames. File类最常 ...
- NPM使用介绍
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用 允许用户NPM服务器下载并安装别 ...
- android 操蛋的gradle
首先看语法: -include {filename} 从给定的文件中读取配置参数 -basedirectory {directoryname} 指定基础目录为以后相对的档案名称 -injars {cl ...
- 转:JMeter 参数化之利用JDBC Connection Configuration从数据库读取数据并关联变量
1. 下载mysql jar包 下载mysql jar包 http://dev.mysql.com/downloads/connector/j/ 网盘下载地址:mysql-connector-ja ...
- ViewBag的简单使用
一,在控制器中写好数据绑定 //通过ID查找出整列的数据 Case.Models.Case theCase = db.Case.Find(id); View ...
- html5权威指南:表格元素
第十一章:表格元素 ...
- 【LeetCode】423. Reconstruct Original Digits from English
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
- jquery的跳转.禁止全url跳转.只需控制器+方法
success:function(){ window.location.href="/enterprise/show"; } success:function(){ window. ...
- 串string (KMP)
1.Definition 串string,是零个或多个字符组成的有限序列.一般记作S="a1a2a3...an",其中S是串名,双引号括起来的字符序列是串值:ai(1<= i ...
- web.py 学习(二)Worker
Rocket Server 启动一个线程监听客户端的连接,收到连接将连接放置到队列中.线程池中的Worker会以这个连接进行初始化.Rocket中Worker的基类是: class Worker(Th ...