相同类型的两个对象之间的交互

时间:2014-05-24 10:03:50

标签: java nodes communication

我创建了一个对象" Node"有两个参数:hostName(string)和serviceList(字符串列表)。

我还写了一个管理的课程:

  • 将对象节点注册到服务器,创建节点/端口映射并返回节点注册的端口
  • 在已注册到服务器的所有服务列表中搜索单个服务

现在,我需要更进一步,在两个节点之间创建连接,其中一个节点使用另一个节点已注册的服务。我写了另一个名为" ArithmeticService"它包含四种简单方法,"添加" "&。减去#34; "乘"并且"划分",每个人只需在两个长点之间返回相应的操作。

public class ArithmeticServiceHandler implements ArithmeticService.Iface {
  @Override
  public long add(int num1, int num2) throws TException {
    return num1 + num2;
  }

  @Override
  public long multiply(int num1, int num2) throws TException {
    return num1 * num2;
  }

  @Override
  public long substract(int num1, int num2) throws TException {
    return num1 - num2;
  }

  @Override
  public long divide(int num1, int num2) throws TException {
    return num1 / num2;
  }

}

所以,我希望在我的测试中(用于启动)向其各自的serviceLists注册的两个节点,其中服务是ArithmeticService的一个或多个算术运算,然后一个节点请求它需要的服务,发现其他节点拥有它,与第二个节点建立连接并使用它所需的服务。

我很难理解如何建立连接,以及请求节点如何使用它要求的服务。

例如,我是否必须重写对象"节点",考虑到它必须还有变量才能使用所请求的服务?

我是否必须编写方法" useService" (第一个名字出现在我的脑海中),它返回要求的操作?

编辑:添加用于建立连接的代码

public static class ManagementServer extends Server {

    public ManagementServer(int port) {
        super(port);
    }
}

private Server server;
private TTransport transport;
private TProtocol protocol;
private ManagementService.Client client;

public abstract static class Server implements Runnable {

    private TServer tserver;
    private int port;

    public Server(int port) {
        this.port = port;
    }

    public void run() {
        try {
            TServerSocket serverTransport = new TServerSocket(port);

            ManagementService.Processor<ManagementServiceHandler> generateProcessor = new ManagementService.Processor<ManagementServiceHandler>(new ManagementServiceHandler());

            tserver = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).
                    processor(generateProcessor));
            System.out.println("Starting server on port: " + port + "...");
            tserver.serve();
        } catch (TTransportException e) {
            e.printStackTrace();
        }
    }

    public void start() {
        new Thread(this).start();
    }

    public void unserve() {
        tserver.stop();
    }
}

@Before
public void initializeManagementServer() throws Exception {

    server = new ManagementServer(7911);
    server.start();

    Thread.sleep(200);
    transport = new TSocket("localhost", 7911);
    protocol = new TBinaryProtocol(transport);
    client = new ManagementService.Client(protocol);
    transport.open();
}

@Test
...
...
...

@After
public void teardownManagementServer() throws Exception {
    transport.close();
    server.unserve();           
}
}

0 个答案:

没有答案
相关问题