JAVA NIO使用非阻塞模式实现高并发服务器

                Java自1.4以后,加入了新IO特性,NIO. 号称new IO. NIO带来了non-blocking特性. 这篇文章主要讲的是如何使用NIO的网络新特性,来构建高性能非阻塞并发服务器.

文章基于个人理解,我也来搞搞NIO.,求指正.

在NIO之前

服务器还是在使用阻塞式的java socket. 以Tomcat最新版本没有开启NIO模式的源码为例, tomcat会accept出来一个socket连接,然后调用processSocket方法来处理socket.

01while(true) {
02....
03    Socket socket = null;
04    try {
05        // Accept the next incoming connection from the server
06        // socket
07        socket = serverSocketFactory.acceptSocket(serverSocket);
08    }
09...
10...
11    // Configure the socket
12    if (running && !paused && setSocketOptions(socket)) {
13        // Hand this socket off to an appropriate processor
14        if (!processSocket(socket)) {
15            countDownConnection();
16            // Close socket right away(socket);
17            closeSocket(socket);
18        }
19    }
20....
21}


使用ServerSocket.accept()方法来创建一个连接. accept方法是阻塞方法,在下一个connection进来之前,accept会阻塞.

在一个socket进来之后,Tomcat会在thread pool里面拿出一个thread来处理连接的socket. 然后自己快速的脱身去接受下一个socket连接. 代码如下:

01    protected boolean processSocket(Socket socket) {
02        // Process the request from this socket
03        try {
04            SocketWrapper<Socket> wrapper = new SocketWrapper<Socket>(socket);
05            wrapper.setKeepAliveLeft(getMaxKeepAliveRequests());
06            // During shutdown, executor may be null - avoid NPE
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值