0

我有这个相当简单的 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 的 ping 表示延迟为 20 毫秒。奇怪的是,它确实需要一段时间才能显示出来,而例如 ping google.com(也是 20 毫秒)的结果相当快。

会发生什么?我该如何分析这个?

4

0 回答 0