Длинная задержка в удаленном RMI (резервирование предназначено) - PullRequest
0 голосов
/ 03 августа 2011

У меня довольно простое взаимодействие RMI.

Сервер:

LocateRegistry.createRegistry(settings.rmiPort).bind("server", UnicastRemoteObject.exportObject(remoteMe, 0));

private final class RemoteLobbyServerImpl implements RemoteLobbyServer {
    @Override public void registerRobotServer(RemoteRobotServer robotServer, int seq) throws RemoteException {
        System.out.println(String.valueOf(seq));
//          robotManager.setServer(robotServer);
    }
}

Клиент:

        final Registry registry = LocateRegistry.getRegistry(lobbyHost, lobbyRmiPort);

        log.info("Looking up lobbyserver...");
        remoteLobbyServer = (RemoteLobbyServer) registry.lookup("server");
        log.info(remoteLobbyServer.toString());

        remoteMe = new RemoteRobotServerImpl();
        final int seq = (int)(Math.random() * 10);
        log.info("Registering myself "+seq+" ...");
        Future<?> registerTask = ThreadPool.submit(new Runnable() { @Override public void run() {
            try {
                remoteLobbyServer.registerRobotServer((RemoteRobotServer) UnicastRemoteObject.exportObject(remoteMe, 0), seq);
            } catch (RemoteException e) {
                throw new RuntimeException(e);
            }
            log.info("Registered");
        }});
        try {
            registerTask.get(30, TimeUnit.SECONDS);
        } catch (TimeoutException e) {
            registerTask.cancel(true);
            throw new RuntimeException("Registration timed out");
        }

Это прекрасно работает, когда я запускаю его на той же машине,Однако он распадается, когда между клиентом и сервером существует некоторое расстояние.Затем серверу потребуется около 2 минут для ответа.

Пинг Linux сообщает, что задержка составляет 20 мс.Как ни странно, это занимает некоторое время, прежде чем он показывает, что, например, ping google.com (также 20 мс) дает результаты довольно быстро.

Что может быть вверх?Как я могу проанализировать это?

...