Tomcat的Socket兑现:org.apache.tomcat.util.net(一)

Tomcat的Socket实现:org.apache.tomcat.util.net(一)

org.apache.tomcat.util.net包的内容都与网络连接和socket有关,比较主要和常见的是JIOEndpoint这个类,前面提到Coyote连接器的时候,就有涉及到JIOEndpoint,它用于监听某个socket端口、将socket对象交给coyote,并提供基本的线程池功能。除了JIOEndpoint,还有AprEndpoint、NioEndpoint等。由于对apr和nio不熟悉,所以只研究了一下JIOEndpoint

org.apache.tomcat.util.net.JIoEndpoint

JIOEndpoint其实和我们本科时上计算机网络或者分布式系统,做实验写的socket服务器差不多,结构也是经典的“Listen-Accept-Handle”,这里简单描述一下:JIOEndpoint使用JDK的ServerSocket类监听某个端口,有socket连接进来的时候便返回一个socket对象,交给专门的处理器。当然,具体的实现没那么简单,下面会按照socket的处理过程,详细说明其中的机理。

初始化

public void init()

        throws Exception {

        if (initialized)

            return;

        // Initialize thread count defaults for acceptor

        if (acceptorThreadCount == 0) {

            acceptorThreadCount = 1;

        }

        if (serverSocketFactory == null) {

            serverSocketFactory = ServerSocketFactory.getDefault();

        }

        if (serverSocket == null) {

            try {

                if (address == null) {

                    serverSocket = serverSocketFactory.createSocket(port, backlog);

                } else {

                    serverSocket = serverSocketFactory.createSocket(port, backlog, address);

                }

            } catch (BindException be) {

                throw new BindException(be.getMessage() + “:” + port);

            }

        }

        //if( serverTimeout >= 0 )

        //    serverSocket.setSoTimeout( serverTimeout );

        initialized = true;

    }

在这里,利用serverSocketFactory新建了一个serverSocket对象,用于监听特定的端口

启动JIOEndpoint

// Create worker collection

            if (executor == null) {

                workers = new WorkerStack(maxThreads);

            }

            // Start acceptor threads

            for (int i = 0; i < acceptorThreadCount; i++) {

                Thread acceptorThread = new Thread(new Acceptor(), getName() + “-Acceptor-” + i);

                acceptorThread.setPriority(threadPriority);

               

Tomcat的Socket兑现:org.apache.tomcat.util.net(一)

相关文章:

你感兴趣的文章:

标签云: