1

当客户端与服务器连接或断开连接时,我如何在服务器端知道?

ZeroC Ice 是否为这些事件提供了一些回调函数?

最小演示:

服务器端

try(com.zeroc.Ice.Communicator communicator = com.zeroc.Ice.Util.initialize(args))
    {
        com.zeroc.Ice.ObjectAdapter adapter =
            communicator.createObjectAdapterWithEndpoints("Hello", "default -h localhost -p 10000");
        adapter.add(new HelloI(), com.zeroc.Ice.Util.stringToIdentity("hello"));
        adapter.activate();
        communicator.waitForShutdown();
    }

客户端

    try(com.zeroc.Ice.Communicator communicator = com.zeroc.Ice.Util.initialize(args))
    {
        HelloPrx hello = HelloPrx.checkedCast(communicator.stringToProxy("hello:default -h localhost -p 10000"));
        hello.sayHello();
    }
4

1 回答 1

0

从服务器端,您可以检查current.con成员并注册关闭回调,如果它是之前未见过的连接,请参阅setCloseCallback

current 是com.zeroc.Ice.Current传递给所有服务方法的参数,例如在sayHello实现中你可以做

@Override
public void sayHello(int delay, com.zeroc.Ice.Current current)
{
    // Check if current.con is a new connection, you will 
    // need to keep track of that in your code.

    // Install a close callback for the connection.
    current.con.setCloseCallback(con ->
       {
            // Close callback
       });
}
于 2017-06-14T21:48:31.327 回答