java nio socket_Java Nio(三) - 用NIO实现高性能socketserver

socket server是基于TCP协议的C/S通信模式下,服务器端的实现。一个socket server最主要的工作是处理网络IO,同事,高效处理网络IO也是一个socket server最重要的性能指标。

本文会用java NIO框架实现一个同步非阻塞的socket server。

最基础的结构

首先从最基础的考虑。一个socket server最简单最经典的实现必然是多线程阻塞的版本:

主线程监听socket端口(阻塞),每当有新客户连接,为这个用户单独创建一个线程,并在新线程里处理业务逻辑:

class Server implements Runnable {

public void run() {

try {

ServerSocket ss = new ServerSocket(PORT);

while (!Thread.interrupted())

new Thread(new Handler(ss.accept())).start();

// or, single-threaded, or a thread pool

} catch (IOException ex) { }

}

}

class Handler implements Runnable {

final Socket socket;

Handler(Socket s) { socket = s; }

public void run() {

try {

byte[] input = new byte[MAX_INPUT];

socket.getInputStream().read(input);

byte[] output = process(input);

socket.getOutputStream().write(output);

} catch (IOException ex) { }

}

private byte[] process(byte[] cmd) { }

}

这种I/O模型的主要缺点是:线程不是免费的。操作系统分配给每个进程的最大线程数是有限的,在高并发的情况下,服务器会因为不能创建新线程而不能响应请求。

这时,演变成线程池版本的多线程服务器:

public class ExecutorServiceServer

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值