在TCP客户中常用的连接生产消费模型

提要

​ 基于TCP协议编写客户端应用的时候,需要使用TCP协议连接到服务器。

​ 客户端的相关接口要等到连接成功后才能被调用,而客户端与服务器之间的连接过程通常都是异步的,要等到客户端连接成功的返回才能继续操作,这个时候就需要消费-生产者模型。产品是连接,生产者生产了连接,消费者才能正常使用。

示例代码如下:

public class TcpConnection {
    private final Object lock = new Object();
    private TiConnection connection;

    public static TcpConnection getInstance(){
        return Single.SINGLE.tcpConnection;
    }

    private void connectServer() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                TiSocketConnector connector = new TiSocketConnector(3,32768,600);
                connector.connect("localhost:9089", new TiEventSocketConnect() {
                    @Override
                    public void connected(TiConnection tiConnection) {
                        connection = tiConnection;
                        synchronized (lock){
                            try{
                                lock.notifyAll();
                            }catch(Exception e){
                                e.printStackTrace();
                            }
                        }
                    }

                    @Override
                    public void connectFailed() {

                    }
                });
            }
        }).start();
    }

    public TiConnection getConnection(){
        if(connection == null){
            connectServer();
            synchronized (lock){
                try{
                    lock.wait();
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }
        return connection;
    }

    private enum Single {
        SINGLE;
        private TcpConnection tcpConnection;
        private Single(){
            this.tcpConnection = new TcpConnection();
        }
    }

}