Java 同一类型的两个对象之间的交互
我创建了一个具有两个参数的对象“节点”:hostName(字符串)和serviceList(字符串列表) 我还编写了一个类来管理:Java 同一类型的两个对象之间的交互,java,nodes,communication,Java,Nodes,Communication,我创建了一个具有两个参数的对象“节点”:hostName(字符串)和serviceList(字符串列表) 我还编写了一个类来管理: 将对象节点注册到服务器,创建节点/端口的映射并返回节点注册的端口 在已注册到服务器的所有ServiceList中搜索单个服务 现在,我需要更进一步,在两个节点之间创建一个连接,其中一个节点使用另一个节点已注册的服务。我编写了另一个名为“算术服务”的类,它包含四个简单的方法,“加法”、“减法”、“乘法”和“除法”,每个方法只返回两个long之间的相应操作 publ
- 将对象节点注册到服务器,创建节点/端口的映射并返回节点注册的端口
- 在已注册到服务器的所有ServiceList中搜索单个服务
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();
}
}
对象是否通过网络连接?如果是这样,请提供更多的代码,说明如何建立连接编辑第一篇文章。现在,我只在本地工作。