netty-阻塞模式,非阻塞模式
以下方法为阻塞模式(单线程)
只能干一件事。
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-阻塞模式,非阻塞模式相关推荐
- connect函数在阻塞和非阻塞模式下的行为
connect函数在阻塞和非阻塞模式下的行为 当socket使用阻塞模式时,connect函数会阻塞到有明确结果才会返回,如果网络环境较差,可能要等一会,影响体验, 为了解决这个问题,我们使用异步co ...
- socket的阻塞模式和非阻塞模式(send和recv函数在阻塞和非阻塞模式下的表现)
socket的阻塞模式和非阻塞模式 无论是Windows还是Linux,默认创建socket都是阻塞模式的 在Linux中,可以再创建socket是直接将它设置为非阻塞模式 int socket (i ...
- 多路复用与设置阻塞、非阻塞模式
多路复用与设置阻塞.非阻塞模式 - To be, or not to be: that is the question - 博客频道 - CSDN.NET 多路复用与设置阻塞.非阻塞模式 分类: Li ...
- IO模式设置,阻塞与非阻塞的比较,recv参数对性能的影响—O_NONBLOCK(open使用)、IPC_NOWAIT(msgrcv)、MSG_DONTWAIT
非阻塞IO 和阻塞IO: 在网络编程中对于一个网络句柄会遇到阻塞IO 和非阻塞IO 的概念, 这里对于这两种socket 先做一下说明: 基本概念: 阻塞IO:: socket 的阻塞模 ...
- socket阻塞和非阻塞模式
socket阻塞和非阻塞模式 本文讨论Linux下的socket套接字 一.同步.异步阻塞和非阻塞 同步:主动请求并等待IO操作完成的方式 异步:主动请求数据后,可以去处理其它任务,随后等待IO操作完 ...
- 嵌入式Linux 阻塞和非阻塞 IO 驱动设备访问模式
阻塞和非阻塞 IO 是 Linux 驱动开发里面很常见的两种设备访问模式, 在编写驱动的时候一定要考虑到阻塞和非阻塞. 阻塞与非阻塞简介 阻塞操作是指在执行设备操作时, 若不能获得资源, 则挂起进程直 ...
- netty(异步非阻塞、实时、高效率)
1.为什么使用netty 简单,再也不用编写复杂的代码逻辑去实现通信,再也不用考虑性能问题,不需要考虑编解码问题,半包读写问题. netty运用于Hadoop的RPC框架Avro,JMS框架Rocke ...
- 阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO 一锅端
承接上文的操作系统,关于IO会涉及到阻塞.非阻塞.多路复用.同步.异步.BIO.NIO.AIO等几个知识点.知识点虽然不难但平常经常容易搞混,特此Mark下,与君共勉. 1 阻塞跟非阻塞 1.1 阻塞 ...
- 系统间通信1:阻塞与非阻塞式通信B
版权声明:本文引用https://yinwj.blog.csdn.net/article/details/48274255 接上篇:系统间通信1:阻塞与非阻塞式通信A 4.3 NIO通信框架 目前流行 ...
- 阻塞、非阻塞、多路复用、同步、异步、BIO、NIO、AIO 一文搞定
关于IO会涉及到阻塞.非阻塞.多路复用.同步.异步.BIO.NIO.AIO等几个知识点.知识点虽然不难但平常经常容易搞混,特此Mark下,与君共勉. 1 阻塞跟非阻塞 1.1 阻塞 阻塞IO情况下, ...
最新文章
- View工作原理(三)视图大小计算过程(measure过程)
- SSD行业要变天了!因为这种闪存芯片要来
- 【学习笔记】月末操作-GR/IR重组
- Java之品优购课程讲义_day19(6)
- postfix 部署ssl后还是25_宝塔面板的邮局管理器Postfix无法启动解决办法
- 基于React和SpringBoot的快速开发模板QuickAdmin
- Could not connect to SMTP host: smtp.qq.com, port: 465, response: -1 clojure邮箱发送
- 艾媒2018年度手机输入法报告出炉:百度输入法是语音识别最准的输入法
- 深度学习与自然语言处理 主要概念一览
- python通过MySQLdb操作mysql
- 一直以来伴随我的一些学习习惯(part1)
- python 金融知识图谱_从零搭建金融证券知识图谱-Part2
- leetcode刷题方法
- 渗透测试-Kali虚拟机技术
- 达人评测 r7 7730u和i7 12700h差距 锐龙r77730u和酷睿i712700h对比
- Adlik在深度学习异构计算上的实践
- pat 1027. Colors in Mars (20)
- linux怎么释放cached中内存,Linux 释放cached内存
- 亲身经历——短信诈骗
- Set.......