package org.shanbo.feluca.distribute.model.vertical; import org.msgpack.rpc.loop.EventLoop; import org.shanbo.feluca.common.ClusterUtil; import org.shanbo.feluca.common.Constants; import org.shanbo.feluca.common.Server; import org.shanbo.feluca.distribute.model.horizon.MModelRPC; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * use for Reducer & MapReceiver * @author lgn * */ public class ReduceServer extends Server{ static Logger log = LoggerFactory.getLogger(ReduceServer.class); EventLoop loop; org.msgpack.rpc.Server server; String algoName; int totalClients = 1; int port; public ReduceServer(String workerAddress, int totalClients, String algoName){ this.port = new Integer(workerAddress.split(":")[1]) + FloatReducer.PORT_AWAY; this.algoName = algoName; this.totalClients = totalClients; } @Override public String serverName() { return "reduceServer"; } @Override public int defaultPort() { return port; } @Override public String zkPathRegisterTo() { return Constants.Algorithm.ZK_ALGO_CHROOT + "/" + algoName + "/reducer" ; } @Override public void preStart() throws Exception { // ClusterUtil.getWorkerList(); loop = EventLoop.defaultEventLoop(); server = new org.msgpack.rpc.Server(loop); server.serve(new FloatReducerImpl(totalClients)); server.listen("0.0.0.0", defaultPort()); System.out.println("reduceServer[" + port + "] started"); } public String getServerAddress(){ return super.getServerAddress().split(":")[0] + ":" + port; } @Override public void postStop() throws Exception { server.close(); loop.shutdown(); System.out.println("reduceServer[" + port + "] closed"); } }