zoukankan      html  css  js  c++  java
  • Hadoop源码分析2: NIO Socket 分析

    1.客户端

    公司产品的客户端的使用阻塞式的Socket,并没有使用NIO,在Hadoop中遇到再议。

    2.服务器端

    2.1 阻塞式
    例子程序

    public class BIOServer {

      static class Hanlder extendsThread {
        privateSocket socket;

        publicHanlder(Socket socket) {
          this.socket= socket;
        }

        @Override
        public void run(){
        try {
           InputStream in = socket.getInputStream();
           BufferedReader brIn = new BufferedReader(newInputStreamReader(in));
           OutputStream out =socket.getOutputStream();
           out.write(("login: " + new Date() + " ").getBytes());
           while (true) {
           //线程在此阻塞,直到读到客户端新的数据
             String cmd =brIn.readLine();
             System.out.println("receive:" + cmd + " ");
            out.write(("return: " + cmd.toUpperCase() +" ").getBytes());
             if("bye".equalsIgnoreCase(cmd)) {
               out.write(("logout:  " + newDate() + " ").getBytes());
               break;
              }
            }
            socket.close();
          }catch (IOException e) {
            e.printStackTrace();
        }
       }
      }

             publicstatic void main(String[] args) {
             try {
               ServerSocket serverSocket = newServerSocket(7777);
               while (true) {
               //线程在此阻塞,直到收到新的连接
               Socket socket =serverSocket.accept();
               //对每个连接使用一个线程进行处理
               new Hanlder(socket).start();
               }
              } catch(IOException e) {
               e.printStackTrace();
             }
          }
    }


    2.2 非阻塞式
     


  • 相关阅读:
    vscode终端无法使用webpack命令
    vscode 常用配置
    git中fatal: Authentication failed的问题
    vue项目初始化步骤
    Windwos安装Node.js和npm的详细步骤
    node安装教程,全局安装vue,webpack/cli,创建一个vue项目(详细步骤)
    VsCode 自动生成文件头部注释和函数注释
    微信小程序使用字体图标
    微信小程序第三方框架
    查看最近访问的文件目录或文件
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276542.html
Copyright © 2011-2022 走看看