java 网络编程
张声录1
这个作者很懒,什么都没留下…
展开
-
详解netty 线程模型及`EventLoop`
详解netty 线程模型及EventLoop一、线程模型linux下网络并发线程模型主要有下面五种1、apache模型:为每一种连接分配一个进程。主机分配给每个连接的时间和空间代价大,并且随着连接的增多,进程间切换开销也增长了,很难应对大量的客户并发连接。2、TPC模型(Thread per connection):每个线程对应一个连接。比apache模型好,但是还是存在性能开销大的问...原创 2020-04-24 00:18:50 · 516 阅读 · 1 评论 -
netty 拆包、粘包解决之道
netty 拆包、粘包解决之道一、什么是拆包、粘包?拆包是指接收方接收到一个不完整的数据包,粘包则指接收一次接收到多个数据包二、拆包、粘包的产生的原因TCP是一个面向流的协议。TCP是传输层协议,其并不清楚应用层数据的具体含义。TCP使用滑动窗口进行流量控制,所以在业务认为是一个完整的包,很有可能会被TCP拆分为多个数据包进行发送。也有可能会将多个小的包组装成一个大的包发送。三、如何解...原创 2020-04-22 21:34:12 · 297 阅读 · 0 评论 -
ByteBuf 详解(二)
4、可读字节数ByteBuf的可读字节数存储了实际数据。新分配的、包装的或者负责的缓冲区的默认的readerIndex值为0.任何名称以read或者skip开头的操作都将会检索或跳过位于当前readIndex的数据,并且将它增加已读字节数。如果被调用的方法需要一个ByteBuf参数作为写入的目标,并且没有指定目标索引参数,那么该目标缓冲区的writerIndex也将被增加,例如:readBy...原创 2020-04-20 23:02:58 · 1646 阅读 · 0 评论 -
ByteBuf 详解(一)
一、初始ByteBuf网络上数据的基本单位总是字节。java NIO提供了ByteBuffer作为它的字节容器,但是这个类使用起来过于复杂和繁琐。netty的替代品ByteBuf,一个强大的实现。既解决了JDK API的局限性,又为网络应用程序的开发者提供了更好的api。ByteBuf维护着两个索引,一个是读索引,一个是写索引。* +-------------------+--...原创 2020-04-19 22:33:38 · 6631 阅读 · 0 评论 -
netty核心组件概述
1、channelchannel 相当于一个socket。channel的基本I/O操作bind()、connect()、read()和write()依赖顶层网络传输所提供的原语。netty中的接口的类层级如下:如我们在 netty基本概念及入门示例代码 中的客户端配置的NioSocketChannel及服务端的NioServerSocketChannel b.group(grou...原创 2020-04-18 09:18:46 · 334 阅读 · 0 评论 -
netty基本概念及入门示例代码
一、定义netty是一款异步事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端。二、netty特征设计:统一的 API,支持多种传输类型,阻塞的和非阻塞的,简单而强大的线程模型,真正的无连接数据报套接字,支持链接逻辑组件以支持复用易用性:翔实的 Javadoc 和大量的示例集性能:拥有比 Java 的核心 API 更高的吞吐量以及更低的延迟,得益于池化和...原创 2020-04-15 21:30:30 · 385 阅读 · 0 评论 -
NIO网络编程--服务端/客户端示例
我们用NIO 来实现一个简单的网络通讯程序,服务一直向客户端发送 hello,client。然后客户端一直向服务端发送hello,server。服务端代码:package cn.szyrm.network.nio;import java.io.IOException;import java.net.InetSocketAddress;import java.net.ServerSock...原创 2020-04-14 21:31:57 · 189 阅读 · 0 评论 -
NIO三大组件之 selector
channel的注册中心selector是整个NIO的核心,选择器实现了I/O多路复用。使得单一线程有办法同时对多个socket通道实现监控并及时发现需要处理的IO事件。选择的使用比较简单,主要是三个步骤:1、将通道注册到一个通道上这里创建里一个Selector,并将ServerSocketChanne l注册到selector上 //创建一个selector对象 ...原创 2020-04-13 23:44:47 · 176 阅读 · 0 评论 -
数据通讯通道(Channel) 之FileChannel用法简单示例
1、使用FileChannel 从文件中读取数据channel是一个通道,通过它可以写入或者读取数据。所有的数据都得通过buffer来处理,使用NIO来读取数据,一般使用FileChannel的步骤为:1、从FileInputStream中获取到Channel2、创建一个用来存放数据的容器(buffer)3、将数据从channel中读入到buffer中。 /** *...原创 2020-04-13 22:15:09 · 670 阅读 · 0 评论 -
NIO数据容器buffer简单示例
我们都直到,BIO 面向流的,而NIO 则是面向缓冲区的。所以我们需要一个数据容器来作为缓冲来存储即将写入或者读入的数据。对于java 的基本数据类型都有一种对应的buffer,通过我们使用最多的是byteBuffer下面我们来演示下ByteBuffer 的使用情况:public class ByteBufferDemo { public static void main(String...原创 2020-04-13 22:14:00 · 169 阅读 · 0 评论 -
TCP/IP层模型概述
网络分层如下图是采用TCP/IP四层模型。应用程序运行在应用层,只与传输层通话,传输层只与应用层和网际层对话,网际层只与传输层和主机网路层对话,主机网络层通过光纤或其他介质将数据转移到远程系统的主机网络层,然后通过上述各层将数据逐级传输到远程系统的应用层中。例如,当web浏览器向服务器发送请求的时候,浏览器实际上只与本地的传输层进行交互。传输层将请求分解为TCP片,向数据添加序列和校验,...原创 2020-04-10 07:51:54 · 215 阅读 · 0 评论