网络编程
文章平均质量分 87
weixin_42412601
后生仔
展开
-
Netty入门(十二)实现DubboRpC
RPC基本介绍RPC(Remote Procedure Call)—远程过程调用,是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程两个或多个应用程序都分布在不同的服务器上,它们之间的调用都像是本地方法调用一样(如图)常见的 RPC 框架有: 比较知名的如阿里的Dubbo、google的gRPC、Go语言的rpcx、Apache的thrift,Spring 旗下的 Spring Cloud。RPC调用流程服务消费方(c原创 2020-06-27 22:41:03 · 156 阅读 · 0 评论 -
Netty入门(十一)Netty服务器启动源码剖析
目录分析EventLoopGroup 对象分析默认线程数分析 EventLoopGroup 的过程ServerBootstrap 创建和构造过程ServerBootstrap 是个空构造,但是有默认的成员变量分析一下 ServerBootstrap 基本使用情况绑定端口的分析核心代码doBind分析说明 initAndRegisternew一个channel初始化channel将这个channel 注册到某个对象服务器示例代码: // Configure the server.EventLoopGro原创 2020-06-27 17:57:54 · 174 阅读 · 0 评论 -
Netty入门(十)netty粘包拆包原理
目录TCP 粘包和拆包基本介绍TCP 粘包和拆包现象实例服务端客户端测试TCP 粘包和拆包解决方案一个具体的实例自定义协议编解码器服务端客户端测试练习自定义协议编解码器服务端修改客户端修改测试TCP 粘包和拆包基本介绍由于UDP有消息保护边界,不会发生粘包拆包问题,因此粘包拆包问题只发生在TCP协议中。TCP是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个数据包发给接收端,更有效的发给对方,使用了优化方法(Nagle算法)原创 2020-06-26 16:40:09 · 516 阅读 · 1 评论 -
Netty入门(九)netty入站与出站机制
目录基本说明编码解码器Handler调用链机制客户端发送long -> 服务器服务端代码客户端代码测试两个细节问题服务端发送long -> 客户端服务端客户端测试结论其他常用的编解码器解码器-ReplayingDecoder其它解码器其它编码器基本说明netty的组件设计:Netty的主要组件有Channel、EventLoop、ChannelFuture、ChannelHandler、ChannelPipe等ChannelHandler充当了处理入站和出站数据的应用程序逻辑的容器。例如原创 2020-06-26 10:54:01 · 1687 阅读 · 1 评论 -
Netty入门(八)编码和解码的基本介绍
编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据时就需要解码。示意图:codec(编解码器) 的组成部分有两个:decoder(解码器)和 encoder(编码器)。encoder负责把业务数据转换成字节码数据,decoder 负责把字节码数据转换成业务数据Netty 本身的编码解码的机制和问题分析Netty 自身提供了一些 codec(编解码器)Netty 提供的编码器StringEncoder,对字符串数据进行编码ObjectEn.原创 2020-06-25 15:51:25 · 336 阅读 · 0 评论 -
Netty入门(七)WebSocket长连接开发
Http是无状态的,浏览器每次请求,都是创建一个新连接,传输完毕即断开。双方并不能感知对方的状态。而WebSocket是长连接,一次TCP握手,即可建立持久性的连接,并且双方能感知到对方的状态。实例要求:Http协议是无状态的, 浏览器和服务器间的请求响应一次,下一次会重新创建连接.要求:实现基于webSocket的长连接的全双工的交互改变Http协议多次请求的约束,实现长连接了, 服务器可以发送消息给浏览器客户端浏览器和服务器端会相互感知,比如服务器关闭了,浏览器会感知,同样浏览器关闭了,服原创 2020-06-23 23:34:16 · 627 阅读 · 1 评论 -
Netty入门(六)心跳检测机制案例
实例要求:编写一个 Netty心跳检测机制案例, 当服务器超过3秒没有读时,就提示读空闲当服务器超过5秒没有写操作时,就提示写空闲实现当服务器超过7秒没有读或者写操作时,就提示读写空闲服务端:public class MyServer { public static void main(String[] args) { EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup原创 2020-06-23 19:57:09 · 164 阅读 · 0 评论 -
Netty入门(五)群聊系统
实例要求:编写一个 Netty 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)实现多人群聊服务器端:可以监测用户上线,离线,并实现消息转发功能客户端:通过channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得到)目的:进一步理解Netty非阻塞网络编程机制服务端:public class GroupChatServer { private int port; public GroupChatServer(int port)原创 2020-06-23 16:53:19 · 156 阅读 · 0 评论 -
Netty入门(五)核心模块
目录Bootstrap、ServerBootstrapFuture、ChannelFutureChannelSelectorChannelHandler 及其实现类Pipeline 和 ChannelPipelineBootstrap、ServerBootstrapBootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是原创 2020-06-22 22:18:29 · 163 阅读 · 0 评论 -
Netty入门(四)任务队列,异步模型,实现Http服务器
目录任务队列解决方式一:用户程序自定义的普通任务解决方式二:用户自定义定时任务任务队列任务队列的task有3种典型的使用场景用户程序自定义的普通任务用户自定义定时任务非当前Reactor线程调用Channel的各种方法例如:在推送系统的业务线程里面,根据用户的标识,找到对应的Channel引用,然后调用write类方法向该用户推送消息,就会进入到这种场景。最终的write会提交到任务队列中后被异步消费。假设有非常耗时的业务场景,我们希望使用异步执行解决这个问题。解决方式一:用户程序自定义原创 2020-06-21 20:23:31 · 690 阅读 · 1 评论 -
netty入门(三)Netty高性能架构设计
目录Netty概述原生NIO存在的问题Netty优点I/O线程模型传统阻塞I/O服务模型模型分析模型实现代码示例Reactor模型概述单Reactor单线程模式模型分析模型实现代码示例单Reactor多线程模型模型分析模型实现代码示例主从Reactor多线程模型实现代码示例Netty概述原生NIO存在的问题NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。需要具备其他的额外技能:要熟原创 2020-06-17 22:47:21 · 298 阅读 · 0 评论 -
Netty模型代码示例
依赖<!--netty--><dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.42.Final</version></dependency>服务端代码public class NettyServer { public static原创 2020-06-11 22:57:22 · 190 阅读 · 0 评论 -
主从Reactor多线程实现代码
服务端主Reactor:public class GroupChatServer { //定义属性 private Selector selector; private ServerSocketChannel listenChannel; private static final int PORT = 6667; private SubReactor subReactor; //构造器 //初始化工作 public GroupChatSe原创 2020-06-08 00:29:43 · 883 阅读 · 2 评论 -
单Reactor多线程实现代码
客户端:public class GroupChatClient { //定义相关的属性 private final String HOST = "127.0.0.1"; // 服务器的ip private final int PORT = 6667; //服务器端口 private Selector selector; private SocketChannel socketChannel; private String username; //原创 2020-06-07 23:00:37 · 435 阅读 · 0 评论 -
单Reactor单线程实现代码
服务端:public class GroupChatServer { //定义属性 private Selector selector; private ServerSocketChannel listenChannel; private static final int PORT = 6667; //构造器 //初始化工作 public GroupChatServer() { try { //得到选择器原创 2020-06-07 20:51:18 · 367 阅读 · 0 评论 -
netty入门(二)NIO的零拷贝
目录传统IO的读写mmap 优化sendFilemmap 和 sendFile 的区别NIO中的零拷贝(transferTo):零拷贝是网络编程的关键,很多性能优化都离不开它。零拷贝是指:从操作系统的角度来看,文件的传输不存在CPU的拷贝,只存在DMA拷贝。在Java程序中,常用的零拷贝有mmap(内存映射)和 sendFile。零拷贝不仅仅带来更少的数据复制,还能减少线程的上下文切换,减少CPU缓存伪共享以及无CPU校验和计算。传统IO的读写File file = new File("te原创 2020-06-03 18:47:14 · 327 阅读 · 1 评论 -
netty入门(一)
目录Java IO概述1、Netty介绍和应用场景1.1、Netty介绍1.2、Netty的应用场景2、Java IO模型介绍2.1、I/O模型基本说明2.2、I/O模型使用场景分析3、BIO 工作机制3.1、BIO编程简单流程(Socket编程)3.2、BIO 应用实例实例说明实例代码BIO 问题分析Java IO概述1、Netty介绍和应用场景1.1、Netty介绍Netty是由JBOSS提供的一个Java开源框架,现为Github上的独立项目Netty是一个异步的、基于事件驱动的网络应用框转载 2020-06-03 14:51:12 · 167 阅读 · 1 评论