복붙노트

[SPRING] RMI 호스트를 구성하여 액세스하는 클라이언트 포트를 알아야합니다.

SPRING

RMI 호스트를 구성하여 액세스하는 클라이언트 포트를 알아야합니다.

저는 스프링 RMI에서 일하고 있으며 호스트와 클라이언트 하나를 설정했습니다.

아래는 내 호스트의 코드입니다. 호스트가 어떤 클라이언트가 그것에 액세스하고 있는지를 알아야하는 방식으로 수정하고 싶습니다. 즉, 서버는 어떤 클라이언트 포트가 서버에 액세스하고 있는지 알아야합니다.

Spring RMI에서 어떻게 이것을 할 수 있습니까?

인터페이스 : -

package com.javatpoint;  

public interface Calculation {  
int cube(int number);  
}  

수업 :-

package com.javatpoint;  

public class CalculationImpl implements Calculation{  

    @Override  
    public int cube(int number) {  
        return number*number*number;  
    }  

}  

마지막으로 호스트 구성 xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
http://www.springframework.org/schema/beans/spring-beans.xsd">  

<bean id="calculationBean" class="com.javatpoint.CalculationImpl"></bean>  
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">  
    <property name="service" ref="calculationBean"></property>  
    <property name="serviceInterface" value="com.javatpoint.Calculation"></property>  
    <property name="serviceName" value="CalculationService"></property>  
    <property name="replaceExistingBinding" value="true"></property>  
    <property name="registryPort" value="1099"></property>  
</bean>  
</beans>  

다음은 사용되는 수업입니다.

인터페이스 : -

package com.javatpoint;

public interface Calculation {
int cube(int number);
}

구현 클래스 : -

public class CalculationImpl implements Calculation{

    public int cube(int number) {
        return number*number*number;
    }

}

와 메인 클래스

package com.javatpoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Host
{
    public static void main(String[] args)
    {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println("Waiting for requests");

    }
}

지금 클라이언트 호스트를 얻는 방법을 추가하는 방법을 조언하시기 바랍니다 미리 감사드립니다

해결법

  1. ==============================

    1.여러 가지 방법으로 문제를 해결할 수 있습니다.

    여러 가지 방법으로 문제를 해결할 수 있습니다.

    1) 원격 인터페이스에 registerClient (String clientId, Object clientInfo)와 같은 메소드를 하나 추가 할 수 있습니다. 이 메서드의 추가 매개 변수에서 다른 관련 정보를 전달할 수 있습니다. RMI 서버는이 정보를 ConcurrentHashMap과 같은 데이터 구조에 간단하게 저장할 수 있습니다.

    2) registerClient를 호출 한 후, clientId를 cube (String clientId, int num)와 같은 원격 메소드의 매개 변수 중 하나로 전달하여 RMI 서버에서 다른 원격 메소드를 호출 할 수 있습니다.

    3) 클라이언트 IP 만 있으면 Java는 이미 찾고있는 정보를 제공하는 RemoteServer의 getClientHost () API를 제공합니다.

  2. ==============================

    2.나에게 원격 세션 패턴의 경우처럼 들린다.

    나에게 원격 세션 패턴의 경우처럼 들린다.

  3. from https://stackoverflow.com/questions/32156010/configuring-rmi-host-so-that-it-should-know-which-client-port-is-accessing-it by cc-by-sa and MIT license