
Netty学习
文章平均质量分 79
沉淀顶峰相见的PET
<script>alert("Hello")</script>
展开
-
Netty基础---IO多路复用知识(附高频面试题)
引子对于现在网络上的资源,当我们打开浏览器搜索的时候,就会启动一个线程去请求该地址,然后将我们需要的数据返回给我们,随着时间的发展,资源越来越多,一开始碰到10个资源我们可以启动10个线程去获取,但是100个呢?100W个呢?不可能起100W个线程吧,直接能把你的电脑干报废了,首先我们要想到,不是时时刻刻都去获取资源的,所以给每一个资源都单独开一个线程不太现实,所以就需要一个线程来管理多个资源,达到资源的有效利用,就出现了我们IO多路复用举个栗子吧比如你开了一家酒店,正好100间房都住满人了,你们酒店原创 2021-03-31 13:58:55 · 589 阅读 · 0 评论 -
Netty基础,Netty实现群聊系统
NIO群聊系统这里面的知识比较全面,用到了我们之前学习的三大组件,首先我先来给大家介绍本系统的功能服务端功能最基本的当然是注册功能,也就是将serverSocketChannel注册进Selector,Selector负责调度事件监听、读取客户端发来的消息收到客户端的信息后将其转发到其它客户端,完成群聊功能客户端功能连接服务端,注册进Selector读写消息以上就是群聊系统最基本的功能,我们直接上代码,每句话的含义我都标在它的顶上了服务端源码package com.hecl.desig原创 2021-03-28 20:21:20 · 725 阅读 · 0 评论 -
Netty基础---NIO组件---Selector选择器(四)
Selector(选择器)在我们使用一个线程处理多个客户端的连接事件时就可以使用Selector ,Selector采用轮询的机制,去检测每条连接通道是否有事件发生,如果有事件发生,便可以根据发生的事件去做相应的处理,使用选择器之后,只有真正发生读写事件的时候才去启动线程读写,实现了一个线程管理多个通道,减少了多个线程上下文切换的开销我们来看看Selector的模型图这上面是简略图,意思就是多个客户端注册进Selector后,当有读写事件发生时,Selector去启动一个线程来完成读写操作1.因为原创 2021-03-28 15:38:41 · 3237 阅读 · 6 评论 -
Netty基础---NIO组件---Channel通道(三)
Channel(通道)还不知道Channel(通道)在NIO处于什么位置的,可以去看看我Netty学习专题的第一篇Netty基础—NIO简介(一)Channel(通道)有一个特点,它是双向读写的,也就是说它不像流对象(FileInputStream/FileOutputStream)那样,只能读或写我们来看看Channel的源码public interface Channel extends Closeable { //判断通道是否打开 public boolean isOpen();原创 2021-03-27 17:49:33 · 402 阅读 · 1 评论 -
Netty基础---NIO组件---Buffer缓冲区(二)
BufferBuffer(缓存区),在本质上Buffer我们可以称为内存块,线程read()和write()都需要经过Buffer,java中提供了一些方法可以让开发者更便捷的使用BufferBuffer源码:public abstract class Buffer { static final int SPLITERATOR_CHARACTERISTICS = Spliterator.SIZED | Spliterator.SUBSIZED | Spliterator.OR原创 2021-03-27 17:40:37 · 246 阅读 · 0 评论 -
Netty基础---NIO简介(一)
什么是NIOJava NIO全称java non-Blocking IO 是java1.4开始,新提供一系列改进Input/Output的新特性,统称为NIO,是同步非阻塞也是面向Buffer开发的什么是同步非阻塞的呢?按照我们普通的IO来说,当一条线程去read()或write()一些数据时,会一直等待返回结果,也就是说不能干其他的事情,这样大大降低了线程的效率,如下图而NIO就很好的弥补了这个问题,实现NIO主要有三个工具非常重要Buffer、Channel、Selector,我们先来看看这三个组原创 2021-03-27 16:58:07 · 351 阅读 · 0 评论