《Netty权威指南》之java NIO值非阻塞网络编程

package com.lyzx.netty.day01;

import org.junit.Test;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;

/**
 * java NIO之非阻塞式编程
 *
 */
public class NonBlockingNetWork {


    /**
     * 客户端
     *
     * @throws IOException
     */
    @Test
    public void client() throws IOException{
        SocketChannel sChannel = SocketChannel.open(new InetSocketAddress("127.0.0.1",9988));
        //在向服务端发送数据时把通道转换为非阻塞模式
        sChannel.configureBlocking(false);
        ByteBuffer data = ByteBuffer.wrap(("你好:"+System.currentTimeMillis()).getBytes("UTF-8"));
        sChannel.write(data);
        data.clear();
        sChannel.close();
    }


    @Test
    public void server() throws IOException {
        ServerSocketChannel ssChannel = ServerSocketChannel.open();
        //把服务端通道转换为非阻塞式
        ssChannel.configureBlocking(false);
        ssChannel.bind(new InetSocketAddress(9988));

        //新开一个选择器,并把服务端通道注册到选择器上,
        // 到服务器通道持有选择器的引用后就知道把事件通知给谁
        Selector selector = Selector.open();
        ssChannel.register(selector,SelectionKey.OP_ACCEPT);


        //轮询监控选择器,selector.select() >0 代表有事件准备就绪
        while(selector.select() > 0){
            //把就绪的时间列表取出来遍历
            Iterator<SelectionKey> itr = selector.selectedKeys().iterator();
            while(itr.hasNext()){
                //遍历时间列表并判断是具体的那种时间并做相应的处理
                SelectionKey key = itr.next();

                //可接收事件,表示接收就绪,
                // 此时再把客户端通道转换为非阻塞式并注册到选择器上
                if(key.isAcceptable()){
                    SocketChannel sChannel = ssChannel.accept();
                    sChannel.configureBlocking(false);
                    sChannel.register(selector,SelectionKey.OP_READ);
                }else if(key.isReadable()){
                    //读就绪 此时可以放心的读取数据,当然最好是把读操作交给线程池里面的一个线程
                    //非阻塞式
                    SocketChannel sc = (SocketChannel)key.channel();

                    ByteBuffer buffer = ByteBuffer.allocate(1024);
                    while(sc.read(buffer) != -1){
                        buffer.flip();
                        System.out.println(new String(buffer.array(),0,buffer.limit()));
                        buffer.clear();
                    }
                }else if(key.isWritable()){

                }
                itr.remove();
            }
        }
    }
}

 

内容概要:本文档详细介绍了在三台CentOS 7服务器(IP地址分别为192.168.0.157、192.168.0.158和192.168.0.159)上安装和配置Hadoop、Flink及其他大数据组件(如Hive、MySQL、Sqoop、Kafka、Zookeeper、HBase、Spark、Scala)的具体步骤。首先,文档说明了环境准备,包括配置主机名映射、SSH免密登录、JDK安装等。接着,详细描述了Hadoop集群的安装配置,包括SSH免密登录、JDK配置、Hadoop环境变量设置、HDFS和YARN配置文件修改、集群启动与测试。随后,依次介绍了MySQL、Hive、Sqoop、Kafka、Zookeeper、HBase、Spark、Scala和Flink的安装配置过程,包括解压、环境变量配置、配置文件修改、服务启动等关键步骤。最后,文档提供了每个组件的基本测试方法,确保安装成功。 适合人群:具备一定Linux基础和大数据组件基础知识的运维人员、大数据开发工程师以及系统管理员。 使用场景及目标:①为大数据平台搭建提供详细的安装指南,确保各组件能够顺利安装和配置;②帮助技术人员快速掌握Hadoop、Flink等大数据组件的安装与配置,提升工作效率;③适用于企业级大数据平台的搭建与维护,确保集群稳定运行。 其他说明:本文档不仅提供了详细的安装步骤,还涵盖了常见的配置项解释和故障排查建议。建议读者在安装过程中仔细阅读每一步骤,并根据实际情况调整配置参数。此外,文档中的命令和配置文件路径均为示例,实际操作时需根据具体环境进行适当修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值