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 非阻塞式
     


  • 相关阅读:
    win7用VMware安装CentOs7搭建Linux环境
    安装Vmware并破解
    Webpack打包
    jquery获取动态table列表的值并组装成数组返回
    微信、钉钉、浏览器上H5页面头部标题(title)的修改,不刷新问题
    帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
    mysql常用语句
    JQuery日期插件
    系统激活教程及文件
    git教程
  • 原文地址:https://www.cnblogs.com/leeeee/p/7276542.html
Copyright © 2011-2022 走看看