前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

Netty

作者头像
名字是乱打的
发布2021-12-22 15:40:21
4470
发布2021-12-22 15:40:21
举报
文章被收录于专栏:软件工程软件工程

由于毕设需要做即时通讯,看了许多即时通讯可能需要的技术,比如轮询,socket,纯websocket,netty,最终选择了netty+websocket,轮询和socket的先排除了,毕竟这种浪费资源的技术学了也施展空间也不大,websocket和netty看了几天,大概了解了一下,最终决定学Nettty+websocket做完整个通讯而不纯websocket,因为NIO算我的一个还没揭开面纱的短板(之前有想过学NIO,单看源码实在让我头疼,就先保留想着以后再学了),这里有需要的话就学习了. NIO的技术点大家可以网上看看,我这里暂时只做简单介绍

一 初识Netty

  • Netty是由JBOSS提供的一个java开源框架。
  • Netty提供异步的、事件驱动的网络应用程序框架和工具,可以用来快速开发高性能、高可靠性的网络服务器和客户端程序。
  • Netty是一个基于NIO客户、服务器端编程框架,使用Netty可以确保你快速和简单的开发一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。
  • “快速”和“简单”并不用产生维护性或性能上的问题。Netty是一个吸收了多种协议(包括FTP、SMTP,HTTP等各种二进制文本协议)的实现经验,并经过相当精心设计的项目。最终,Netty成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和仲缩性。

二 Netty优点

(1)Netty提供了简单易用的API

(2)基于事件驱动的编程方式来编写网络通信程序

(3)更高的吞吐量

(4)学习难度低

三 BIO NIO AIO介绍与区别.

阻塞与非阻塞 主要的是访问IO的线程 是否会阻塞(或者说是等待) 线程访问资源,该资源是否准备就绪的一种处理方式。

同步和非同步 主要是指的数据的请求方式 同步和异步是指访问数据的一种机制

三种IO模型

BIO 同步阻塞IO,Block IO,IO操作时会阻塞线程,并发处理能力低。 我们熟知的Socket编程是BIO,一个socket连接一个处理线程(这个线程负责这个Socket连接的一系列数据传输操作)。阻塞的原因在于:操作系统允许的线程数量是有限的,多个socket申请与服务端建立连接时,服务端不能提供相应数量的处理线程,没有分配到处理线程的连接就会阻塞等待或被拒绝。

NIO 同步非阻塞 IO,None-Block IO NIO 是对 BIO 的改进,基于 Reactor 模型。我们知道,一个 socket 连接只有在特定的时候才会发生数据传输 IO 操作,大部分时间这个“数据通道”是空闲的,但还是占用着线程。NIO 作出的改进就是“一个请求一个线程”,在连接到服务端的众多 socket 中,只有需要进行 IO 操作的才能获取服务端的处理线程进行 IO。这样就不会因为线程不够用而限制了 socket的接入

所有的连接过来之后我们用selector进行连接,轮询,只有有IO需求的我们才建立线程供其工作

AIO(NIO 2.0) 异步非阻塞IO 这种IO模型是由操作系统先完成了客户端请求处理 再通知服务解去启动线程进行处理。 AIO也称NI02.0,在JDK7开始支持。

四 Netty Reactor 模型

  • 单线程模型
  • 多线程模型
  • 主从多线程模型
1.单线程模型(接受请求和处理请求都是同一个线程)

用户发起 IO 请求到 Reactor 线程

Ractor 线程将用户的 IO 请求放入到通道,然后再进行后续处理

处理完成后,Reactor线程重新获得控制权,继续其他客户端的处理

这种模型一个时间点只有一个任务在执行,这个任务执行完了,再去执行下一个任务。 1.单线程的Reactor模型每一个用户事件那在一个线程中执行: 2.性能有极限,不能处理成百上千的事件 3.当货荷达到一定程度时,性能将会下降

4.某一个事件处理器发生故障,不能继续处理其他事件

2 Reactor多线程模型.(接收请求是单个线程,处理请求的是一个线程池(多个线程))

Reactor多线程模型是由一组NIO线程来处理IO操作(之前是单个线程),所以在请求处理上会比上一中模型效率更高,可以处理更多的客户端请求。

这种模式使用多个线程执行多个任务,任务可以同时执行

但是如果并发仍然很大,Reactor仍然无法处理大量的客户端请求

3 Reactor主从多线程模型.(接收请求的是一个线程池,处理请求的是一个线程池 )

这种线程模型是Netty 推荐使用的线程模型这种模型适用于高并发场景,一组线程池接收请求,一组线程池处理IO.

写了一个websocket+netty的实战demo,可以先看这个https://cloud.tencent.com/developer/article/1923104,也可以后面等着看我的1:1仿网页微信的聊天工具

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/10/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 初识Netty
  • 二 Netty优点
  • 三 BIO NIO AIO介绍与区别.
    • 三种IO模型
      • 1.单线程模型(接受请求和处理请求都是同一个线程)
      • 2 Reactor多线程模型.(接收请求是单个线程,处理请求的是一个线程池(多个线程))
  • 四 Netty Reactor 模型
相关产品与服务
即时通信 IM
即时通信 IM(Instant Messaging)基于腾讯二十余年的 IM 技术积累,支持 Android、iOS、Mac、Windows、Web、H5、小程序平台且跨终端互通,低代码 UI 组件助您30分钟集成单聊、群聊、关系链、消息漫游、群组管理、资料管理、直播弹幕和内容审核等能力。适用于直播互动、电商带货、客服咨询、社交沟通、在线课程、企业办公、互动游戏、医疗健康等场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档