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

Java 同一类型的两个对象之间的交互,java,nodes,communication,Java,Nodes,Communication,我创建了一个具有两个参数的对象“节点”:hostName(字符串)和serviceList(字符串列表) 我还编写了一个类来管理: 将对象节点注册到服务器,创建节点/端口的映射并返回节点注册的端口 在已注册到服务器的所有ServiceList中搜索单个服务 现在,我需要更进一步,在两个节点之间创建一个连接,其中一个节点使用另一个节点已注册的服务。我编写了另一个名为“算术服务”的类,它包含四个简单的方法,“加法”、“减法”、“乘法”和“除法”,每个方法只返回两个long之间的相应操作 publ

我创建了一个具有两个参数的对象“节点”:hostName(字符串)和serviceList(字符串列表)

我还编写了一个类来管理:

  • 将对象节点注册到服务器,创建节点/端口的映射并返回节点注册的端口
  • 在已注册到服务器的所有ServiceList中搜索单个服务
现在,我需要更进一步,在两个节点之间创建一个连接,其中一个节点使用另一个节点已注册的服务。我编写了另一个名为“算术服务”的类,它包含四个简单的方法,“加法”、“减法”、“乘法”和“除法”,每个方法只返回两个long之间的相应操作

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;
  }

}
因此,在我的测试中,我想让(用于启动)两个节点在各自的服务列表中注册,其中服务是算术服务的一个或多个算术操作,然后一个节点请求它需要的服务,发现另一个节点拥有它,与第二个节点建立连接并使用它需要的服务

我的困难在于理解如何建立连接,以及请求节点如何使用它请求的服务

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

我是否必须编写一个方法“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();           
}
}
公共静态类ManagementServer扩展服务器{
公共管理服务器(int端口){
超级(港口);
}
}
专用服务器;
私人运输;
专用TProtocol协议;
私人管理服务。客户;
公共抽象静态类服务器实现可运行{
专用TServer TServer;
专用int端口;
公共服务器(int端口){
this.port=端口;
}
公开募捐{
试一试{
TServerSocket serverTransport=新的TServerSocket(端口);
ManagementService.Processor generateProcessor=新的ManagementService.Processor(新的ManagementServiceHandler());
tserver=newtthreadpoolserver(newtthreadpoolserver.Args(serverTransport)。
处理器(生成处理器);
System.out.println(“在端口上启动服务器:“+port+”);
tserver.service();
}捕获(TTransportException e){
e、 printStackTrace();
}
}
公开作废开始(){
新线程(this.start();
}
公共无效不服务(){
tserver.stop();
}
}
@以前
public void initializeManagementServer()引发异常{
服务器=新的管理服务器(7911);
server.start();
睡眠(200);
传输=新的TSocket(“本地主机”,7911);
协议=新的TBinaryProtocol(运输);
client=新的ManagementService.client(协议);
transport.open();
}
@试验
...
...
...
@之后
public void teardownManagementServer()引发异常{
transport.close();
server.unserve();
}
}

对象是否通过网络连接?如果是这样,请提供更多的代码,说明如何建立连接编辑第一篇文章。现在,我只在本地工作。