flex 集群问题
集群在很大程度上都是解决session共享问题
?
flex 集群也是一样。项目中没有用到flex的session 但是不管你用没用到session? MessageBrokerServlet 都会帮你创建一个session
?
代码为:HttpFlexSession fs = httpFlexSessionProvider.getOrCreateSession(req);?
?
如果不用session而每次都创建这也是一个不小的开销。而且用 nginx 转发多个服务的时候会有session不正确的问题
?
转决方法有二
?
1.一直访问第一次请求的那台服务 用nginx ip_hash可以解决(如果这台服务死了。仍有session问题,而且负载效果不是很明显)
2.将blazeds 的session阉割掉.. 会感觉凉快很多
?
本例用的blazeds版本为 4.0.1.17657
?
到刀修改两个类:MessageBrokerServlet,AbstractEndpoint
?
MessageBrokerServlet的service方法
public FlexClient setupFlexClient(String id) { FlexClient flexClient = null; if (id != null) { // This indicates that we're dealing with a non-legacy client that hasn't been // assigned a FlexClient Id yet. Reset to null to generate a fresh Id. if (id.equals(FlexClient.NULL_FLEXCLIENT_ID)) id = null; flexClient = getMessageBroker().getFlexClientManager().getFlexClient(id); // Make sure the FlexClient and FlexSession are associated. //客户端设置不用session 这里取session 判断是否为空 //FlexSession session = FlexContext.getFlexSession(); //flexClient.registerFlexSession(session); // And place the FlexClient in FlexContext for this request. FlexContext.setThreadLocalFlexClient(flexClient); } return flexClient; }
?
当然在实践中应尽量拓展不推荐用修改源码的方式
?
blazeds3阉割可以参考下面这个贴子:http://www.iteye.com/topic/875364