heartbeat threads blocks process shutdown because its hashed-wheel-timer is non-daemon thread.
channel.send(message);
    }
    @Override
    public void send(Object message, boolean sent) throws RemotingException {
        channel.send(message, sent);
    }
    @Override
    public boolean isClosed() {
        return channel.isClosed();
    }
    @Override
    public void close() {
        doClose();
        channel.close();
    }
    @Override
    public void close(int timeout) {
        
        startClose();
        doClose();
        channel.close(timeout);
    }
    @Override
    public void startClose() {
        channel.startClose();
    }
    @Override
    public void reset(URL url) {
        client.reset(url);
    }