Появление команды для сервера Throwft: java. CancelledKeyException и epoll bug - PullRequest
0 голосов
/ 04 февраля 2020

thriftServer: TThreadedSelectorServer

, когда я использую Runtime.getRuntime (). Exe c (cmd) или Apache DefaultExecutor для выполнения команды linux 'ls -al xxxx', всегда появляется:

 WARN Thread-3 org.apache.thrift.server.TThreadedSelectorServer - Created new Selector.
 WARN Thread-3 org.apache.thrift.server.TThreadedSelectorServer - Replace new selector success.
 ERROR Thread-3 org.apache.thrift.server.TThreadedSelectorServer - run() on SelectorThread exiting due to uncaught error
 java.nio.channels.CancelledKeyException
    at sun.nio.ch.SelectionKeyImpl.ensureValid(SelectionKeyImpl.java:73)
    at sun.nio.ch.SelectionKeyImpl.interestOps(SelectionKeyImpl.java:82)
    at org.apache.thrift.server.AbstractNonblockingServer$FrameBuffer.changeSelectInterests(AbstractNonblockingServer.java:441)
    at org.apache.thrift.server.AbstractNonblockingServer$AbstractSelectThread.processInterestChanges(AbstractNonblockingServer.java:191)
    at org.apache.thrift.server.TThreadedSelectorServer$SelectorThread.run(TThreadedSelectorServer.java:548)

код клиента

public static void test()
    {
        int count = 0;
        for (;;)
        {
            try (TSocket tSocket = new TSocket("xxxx", xxxx);
                    TTransport trans = new TFramedTransport(tSocket);)
            {
                System.out.println("Port: " + tSocket.getSocket().getLocalPort());
                TProtocol protocol = new TBinaryProtocol(trans);
                TMultiplexedProtocol tmp = new TMultiplexedProtocol(protocol, xxxx.class.getSimpleName());
                xxx.Client client = new xxx.Client(tmp);
                trans.open();
                String targetPath = client.xxx("ls -al xxx");
                System.out.println(targetPath + "--" + (count++));
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }

...