Java RMI - Client Timeout

前端 未结 4 1539
走了就别回头了
走了就别回头了 2020-11-30 05:53

I\'m building a Distributed System using Java RMI and it must support a server loss.

If my client is connected to a Server using RMI, if this server goes down (cable

相关标签:
4条回答
  • 2020-11-30 06:39

    There is a system property that you can set.
    Something like sun.rmi.transport.connectionTimeout

    They are detailed here:
    https://docs.oracle.com/javase/7/docs/technotes/guides/rmi/sunrmiproperties.html

    0 讨论(0)
  • 2020-11-30 06:41

    I recently encountered this problem as well and found that I needed to set the following Java property in order for an RMI call to timeout on the client side:

    sun.rmi.transport.tcp.responseTimeout
    

    Here is the full scoop on these params in newer versions of Java:

    • http://docs.oracle.com/javase/6/docs/technotes/guides/rmi/sunrmiproperties.html
    • http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/sunrmiproperties.html
    0 讨论(0)
  • 2020-11-30 06:41

    You can use custom socket factories. It works fine , It is not static and deprecated and against the system property, it does not apply to the whole JVM. But the point is that the code is on the server side.

    Creating a Custom RMI Socket Factory

    0 讨论(0)
  • 2020-11-30 06:43

    For socket read timeout, you can set your own factory like this,

               RMISocketFactory.setSocketFactory( new RMISocketFactory()
                {
                    public Socket createSocket( String host, int port )
                        throws IOException
                    {
                        Socket socket = new Socket();
                        socket.setSoTimeout( timeoutMillis );
                        socket.setSoLinger( false, 0 );
                        socket.connect( new InetSocketAddress( host, port ), timeoutMillis );
                        return socket;
                    }
    
                    public ServerSocket createServerSocket( int port )
                        throws IOException
                    {
                        return new ServerSocket( port );
                    }
                } );
    
    0 讨论(0)
提交回复
热议问题