Netty

160 阅读1分钟

一、IO、NIO

1、http服务器原理

public static void initServerSocket() {    
    try {        
        //创建一个ServerSocket,绑定一个端口        
        ServerSocket serverSocket = new ServerSocket(ipPort);        
        //获取一个来自客户端的连接        
        Socket clientSocket = serverSocket.accept();        
        //获取输入流        
        BufferedReader reader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));        
        PrintWriter writer = new PrintWriter(clientSocket.getOutputStream(), true);        
        String request, response;        
        while ((request = reader.readLine()) != null) {            
            if ("Done".equals(request)) {                
                break;            
            }            
            response = processRequest(request);//请求被服务器处理方法
            writer.println(response);        
        }    
    } catch (IOException e) {        
    e.printStackTrace();    
}
HTTP服务器之所以称为HTTP服务器,是因为编码解码协议是HTTP协议,如果协议是Redis协议,那它就成了Redis服务器,如果协议是WebSocket,那它就成了WebSocket服务器,等等。 使用Netty你就可以定制编解码协议,实现自己的特定协议的服务器。

阻塞模式:

  • 客户端监听(Listen)时,Accept是阻塞的,只有新连接来了,Accept才会返回,主线程才能继续
  • 读写socket时,Read是阻塞的,只有请求消息来了,Read才能返回,子线程才能继续处理
  • 读写socket时,Write是阻塞的,只有客户端把消息收了,Write才能返回,子线程才能继续读取下一个请求
  • 缺点:

          所有线程阻塞,浪费资源。