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)到底 ...
随机推荐
- CSS3之动画Animation特效
CSS3的出现 让我们通过css样式也能写出炫酷的特效 通过 Animation 这个属性 无需插件和jquery也可以轻松的完成简单的动画效果 DEMO: <!DOCTYPE html> ...
- python 小程序(1)
这是在一个文件夹下将符合条件的文件中,第一列是相同的,对每个文件中第二列的数求和,输出为一个txt文件,文件内容格式为:第一列的每个数对应[这个所有符合条件的文件中第一列这个数对应的第二个数的]求和 ...
- slf4j 之logback日志之sl4j架构【二】
一.整体介绍 介绍: The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for v ...
- wxpython 安装教程
wxpython在windows 上的安装,需要在wxpython官网上下载对应的版本:Python分为32和64位系统不是系统的32位和64位 所以可以先在IDE 下输入Python看下当前是32还 ...
- sublime从官网纯净版到插件完整版
01.纯净版下载地址:www.sublimetext.com/ 02.下载Package Control插件管理工具,网址:https://packagecontrol.io/ 安装介绍:https: ...
- Merge into的使用详解-你Merge了没有【转】
Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key. Oracle在9i引入了merge命令, 通过这个merge你能够在一个SQL语句中对一 ...
- HDU 1248 寒冰王座
完全背包 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...
- MYSQL导入中文数据乱码的四种解决办法
方法一:通过增加参数 --default-character-set = utf8 解决乱码问题 方法一:通过增加参数 --default-character-set = utf8 解决乱码问题 my ...
- 使用bootstrap建立响应式网页——通栏轮播图(carousel)
1.bootstrap提供了js插件——轮播图 我们还是照旧,直接拿过来用,需要改的地方再说. 2.修改 小屏幕看小图,大屏图看大图:这个可以利用自定义属性(data-XXX)data-img-lg( ...
- git 第一次 push 遇到问题
开始用 git 的时候我只会 git clone git pull git push 这三个命令满足了我的基本需求,到自己创建仓库的时候遇到了问题, git remote add origin htt ...