以下方法为阻塞模式(单线程)
只能干一件事。

import lombok.extern.slf4j.Slf4j;import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.ArrayList;
import java.util.List;import static com.netty.c1.ByteBufferUtil.debugRead;@Slf4j(topic = "c.Server")
public class Server {public static void main(String[] args) throws IOException {ByteBuffer buffer = ByteBuffer.allocate(16);// 创建服务器ServerSocketChannel ssc = ServerSocketChannel.open();// 绑定监听端口ssc.bind(new InetSocketAddress(8080));List<SocketChannel> channels = new ArrayList<>();while(true) {log.debug("connection...");// 建立与客户端的连接SocketChannel sc = ssc.accept(); // 阻塞方法,线程停止运行log.debug("connected...{}",sc);channels.add(sc);// 接受客户端发送的数据for (SocketChannel channel : channels) {log.debug("before read...{}",channel);channel.read(buffer); // 阻塞方法,线程停止运行buffer.flip();debugRead(buffer);buffer.clear();log.debug("after read...{}",channel);}}}
}

以下方法为非阻塞模式(单线程)

import lombok.extern.slf4j.Slf4j;import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.ArrayList;
import java.util.List;import static com.netty.c1.ByteBufferUtil.debugRead;@Slf4j(topic = "c.Server")
public class Server {public static void main(String[] args) throws IOException {ByteBuffer buffer = ByteBuffer.allocate(16);// 创建服务器ServerSocketChannel ssc = ServerSocketChannel.open();// 非阻塞模式ssc.configureBlocking(false);// 绑定监听端口ssc.bind(new InetSocketAddress(8080));List<SocketChannel> channels = new ArrayList<>();// 有一个缺点:没有连接请求时,也会不断循环。// 没有数据可读时,也会不断循环。while(true) {//log.debug("connection...");// 建立与客户端的连接SocketChannel sc = ssc.accept(); // 非阻塞,线程还会继续运行。如果没有建立连接,sc是nullif(sc != null){log.debug("connected...{}",sc);sc.configureBlocking(false);channels.add(sc);}// 接受客户端发送的数据for (SocketChannel channel : channels) {//log.debug("before read...{}",channel);int read = channel.read(buffer); // 非阻塞,线程仍然继续运行。如果没有读到数据,read返回0if(read > 0) {buffer.flip();debugRead(buffer);buffer.clear();log.debug("after read...{}", channel);}}}}
}

netty-阻塞模式,非阻塞模式相关推荐

  1. connect函数在阻塞和非阻塞模式下的行为

    connect函数在阻塞和非阻塞模式下的行为 当socket使用阻塞模式时,connect函数会阻塞到有明确结果才会返回,如果网络环境较差,可能要等一会,影响体验, 为了解决这个问题,我们使用异步co ...

  2. socket的阻塞模式和非阻塞模式(send和recv函数在阻塞和非阻塞模式下的表现)

    socket的阻塞模式和非阻塞模式 无论是Windows还是Linux,默认创建socket都是阻塞模式的 在Linux中,可以再创建socket是直接将它设置为非阻塞模式 int socket (i ...

  3. 多路复用与设置阻塞、非阻塞模式

    多路复用与设置阻塞.非阻塞模式 - To be, or not to be: that is the question - 博客频道 - CSDN.NET 多路复用与设置阻塞.非阻塞模式 分类: Li ...

  4. IO模式设置,阻塞与非阻塞的比较,recv参数对性能的影响—O_NONBLOCK(open使用)、IPC_NOWAIT(msgrcv)、MSG_DONTWAIT

    非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明:        基本概念: 阻塞IO:: socket 的阻塞模 ...

  5. socket阻塞和非阻塞模式

    socket阻塞和非阻塞模式 本文讨论Linux下的socket套接字 一.同步.异步阻塞和非阻塞 同步:主动请求并等待IO操作完成的方式 异步:主动请求数据后,可以去处理其它任务,随后等待IO操作完 ...

  6. 嵌入式Linux 阻塞和非阻塞 IO 驱动设备访问模式

    阻塞和非阻塞 IO 是 Linux 驱动开发里面很常见的两种设备访问模式, 在编写驱动的时候一定要考虑到阻塞和非阻塞. 阻塞与非阻塞简介 阻塞操作是指在执行设备操作时, 若不能获得资源, 则挂起进程直 ...

  7. netty(异步非阻塞、实时、高效率)

    1.为什么使用netty 简单,再也不用编写复杂的代码逻辑去实现通信,再也不用考虑性能问题,不需要考虑编解码问题,半包读写问题. netty运用于Hadoop的RPC框架Avro,JMS框架Rocke ...

  8. 阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO 一锅端

    承接上文的操作系统,关于IO会涉及到阻塞.非阻塞.多路复用.同步.异步.BIO.NIO.AIO等几个知识点.知识点虽然不难但平常经常容易搞混,特此Mark下,与君共勉. 1 阻塞跟非阻塞 1.1 阻塞 ...

  9. 系统间通信1:阻塞与非阻塞式通信B

    版权声明:本文引用https://yinwj.blog.csdn.net/article/details/48274255 接上篇:系统间通信1:阻塞与非阻塞式通信A 4.3 NIO通信框架 目前流行 ...

  10. 阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO 一文搞定

    关于IO会涉及到阻塞.非阻塞.多路复用.同步.异步.BIO.NIO.AIO等几个知识点.知识点虽然不难但平常经常容易搞混,特此Mark下,与君共勉. 1 阻塞跟非阻塞 1.1 阻塞 ​阻塞IO情况下, ...

最新文章

  1. View工作原理(三)视图大小计算过程(measure过程)
  2. SSD行业要变天了!因为这种闪存芯片要来
  3. 【学习笔记】月末操作-GR/IR重组
  4. Java之品优购课程讲义_day19(6)
  5. postfix 部署ssl后还是25_宝塔面板的邮局管理器Postfix无法启动解决办法
  6. 基于React和SpringBoot的快速开发模板QuickAdmin
  7. Could not connect to SMTP host: smtp.qq.com, port: 465, response: -1 clojure邮箱发送
  8. 艾媒2018年度手机输入法报告出炉:百度输入法是语音识别最准的输入法
  9. 深度学习与自然语言处理 主要概念一览
  10. python通过MySQLdb操作mysql
  11. 一直以来伴随我的一些学习习惯(part1)
  12. python 金融知识图谱_从零搭建金融证券知识图谱-Part2
  13. leetcode刷题方法
  14. 渗透测试-Kali虚拟机技术
  15. 达人评测 r7 7730u和i7 12700h差距 锐龙r77730u和酷睿i712700h对比
  16. Adlik在深度学习异构计算上的实践
  17. pat 1027. Colors in Mars (20)
  18. linux怎么释放cached中内存,Linux 释放cached内存
  19. 亲身经历——短信诈骗
  20. Set.......

热门文章

  1. Perl的输出:print、say和printf、sprintf
  2. node.js入门系列(一)--Node.js简介
  3. win8电源图标显示不出来
  4. 计算机学院大学生程序设计竞赛(2015’11)1007 油菜花王国
  5. 问候Maven3(笔记一)
  6. poj2140---herd sums
  7. UICollectionView的使用
  8. Mysql 事务锁表,解决方法
  9. 安装oracle11g时,Enterprise Manager配置成功,出现以下警告……
  10. Windows GPT磁盘GUID结构详解