Netty

Netty 搭建 WebSocket 服务端

元气小坏坏 提交于 2020-04-28 01:57:30
一、编码器、解码器 ... ... @Autowired private HttpRequestHandler httpRequestHandler; @Autowired private TextWebSocketFrameHandler textWebSocketFrameHandler; ... ... .childHandler(new ChannelInitializer<SocketChannel> () { @Override protected void initChannel(SocketChannel channel) throws Exception { // WebSocket 是基于 Http 协议的,要使用 Http 解编码器 channel.pipeline().addLast("http-codec", new HttpServerCodec()); // 用于大数据流的分区传输 channel.pipeline().addLast("http-chunked",new ChunkedWriteHandler()); // 将多个消息转换为单一的 request 或者 response 对象,最终得到的是 FullHttpRequest 对象 channel.pipeline().addLast("aggregator", new

Netty学习第三节Netty的入门级学习

馋奶兔 提交于 2020-04-27 23:44:34
1、原生NIO存在哪些缺陷 (1)NIO的类库和API繁杂,使用也比较麻烦,需要熟练掌握selector、ServerSocketChannel、SocketChannel、ByteBuffer等 (2)NIO入门门槛高,需要其他相关技能的铺垫,比如:熟悉java多线程编程,因为NIO编程涉及到Reactor模式,必须对多线程和网络非常熟悉,才能编写出高质量的NIO程序。 (3)工作量大,难度大,可靠性能力补齐和工作量难度大,比如客户端面临断连、重连,网络闪断,半包读写,失败缓存,网络拥塞,还有就是异常码流的处理等问题,NIO编程的特点是功能开发相对容易,但是可靠性能力补齐的工作量和难度是非常大的。 (4)JDK NIO存在bug,著名bug是epoil bug,会导致select空轮询,最终导致CPU飙升到百分之百,官方的声称是在JDK1.6的版本中,UPDATE18修复了该问题,但是直到JDK1.7版本,该问题依旧存在,只不过该bug的发生概率降低了一些,并未从根本上得到解决,原始NIO存在非常多的缺陷。 2、Netty的优势 是业界最流行的NIO框架之一,它的健壮性,功能,性能,可定制性,可扩展性,在同类框架中都是首屈一指的,它已经得到成百上千的商业项目的验证,比如阿里的分布式治理框架Dubbo,就是用了Netty作为底层通信框架,还有一些主流的RPC框架

WebSocket专题(阿里)

谁都会走 提交于 2020-04-27 22:40:48
我们的项目中使用了websocket 用java-websocket 开源项目做的,阿里的人问我用啥实现的websocket一时没有答上来 回来做了总结: 1、前言 最近有同学问我有没有做过在线咨询功能。同时,公司也刚好让我接手一个 IM 项目。所以今天抽时间记录一下最近学习的内容。本文主要剖析了 WebSocket 的原理,以及附上一个完整的聊天室实战 Demo (包含前端和后端,代码下载链接在文末)。 2、WebSocket 与 HTTP WebSocket 协议在2008年诞生,2011年成为国际标准。现在所有浏览器都已经支持了。WebSocket 的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话。 HTTP 有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个 HTTP 请求合并为一个,但是 Websocket 其实是一个新协议,跟 HTTP 协议基本没有关系,只是为了兼容现有浏览器,所以在握手阶段使用了 HTTP 。 下面一张图说明了 HTTP 与 WebSocket 的主要区别: WebSocket 的其他特点: 建立在 TCP 协议之上,服务器端的实现比较容易。 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种

【Netty】NIO框架Netty入门

折月煮酒 提交于 2020-04-27 21:19:47
Netty介绍 Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。 也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。 官网地址: http://netty.io/ 使用场景 Netty之所以能成为主流的NIO框架,是因为它有下面的优点: NIO的类库和API使用难度较高,Netty进行了封装,容易上手 高性能,功能强大,支持多种编解码功能,支持多种主流协议 成熟,稳定,已经在多个大型框架中使用(dubbo,RocketMQ,Hadoop,mycat,Spring5) ….. 简单入门 我们编写一个服务端和客户端,客户端往服务端发送一条消息,消息传输先用字符串进行传递,服务端收到客户端发送的消息,然后回复一条消息。 首先编写服务端代码: public class ImServer { public void run( int port) { EventLoopGroup bossGroup = new NioEventLoopGroup();

Java面试小tip精华汇总篇「最新版」

徘徊边缘 提交于 2020-04-27 15:22:46
简历篇 请自我介绍 请介绍项目 基础篇 基本功 面向对象的特征 final, finally, finalize 的区别 int 和 Integer 有什么区别 重载和重写的区别 抽象类和接口有什么区别 说说反射的用途及实现 说说自定义注解的场景及实现 HTTP 请求的 GET 与 POST 方式的区别 session 与 cookie 区别 session 分布式处理 JDBC 流程 MVC 设计思想 equals 与 == 的区别 集合 List 和 Set 区别 List 和 Map 区别 Arraylist 与 LinkedList 区别 ArrayList 与 Vector 区别 HashMap 和 Hashtable 的区别 HashSet 和 HashMap 区别 HashMap 和 ConcurrentHashMap 的区别 HashMap 的工作原理及代码实现 ConcurrentHashMap 的工作原理及代码实现 线程 创建线程的方式及实现 sleep() 、join()、yield()有什么区别 说说 CountDownLatch 原理 说说 CyclicBarrier 原理 说说 Semaphore 原理 说说 Exchanger 原理 说说 CountDownLatch 与 CyclicBarrier 区别 ThreadLocal 原理分析

物联网时代-跟着Thingsboard学IOT架构-MQTT设备协议

心已入冬 提交于 2020-04-27 10:03:19
Thingsboard的MQTT设备协议 thingsboard官网: https://thingsboard.io/ thingsboard GitHub : https://github.com/thingsboard/thingsboard thingsboard提供的体验地址: http://demo.thingsboard.io/ BY Thingsboard team 以下内容是在原文基础上演绎的译文。除非另行注明,页面上所有内容采用知识共享-署名( CC BY 2.5 AU )协议共享。 原文地址: ThingsBoard API参考: MQTT设备API MQTT基础知识 MQTT 是一种轻量级的发布 - 订阅消息传递协议,可能使其最适合各种物联网设备。您可以 在此处 找到有关MQTT的更多信息。 ThingsBoard服务器节点充当MQTT Broker,支持QoS级别0(最多一次)和1(至少一次)以及一组预定义主题。 客户端库设置 您可以在Web上找到大量MQTT客户端库。本文中的示例将基于 Mosquitto , MQTT.js 和 Paho ,要设置其中一个工具。 键值格式 默认情况下,ThingsBoard支持JSON中的键值内容。Key始终是一个字符串,而value可以是string,boolean,double或long

netty学习第5章 netty整合websocket实现服务端与客户端消息推送

做~自己de王妃 提交于 2020-04-26 18:54:51
   学习netty之后,可能都有一个疑问,就是如何选择一个编码、解码器,在netty中的编解码可是和json这种编解码是不一样的,netty的编解码器主要是解决TCP粘包、拆包的问题。netty中有许多自带的编解码器,我推荐使用websocket编解码器。   选用websocket的好处就是它是一个持久化链接,能给让客户端与服务端保持长时间连接;其次websocket中支持许多数据格式,如果文本、二进制、ping信息等等;最后websocket本身也是基于HTTP协议的,所以websocket也能够支持文件的上传,所以选用websocket编解码,是个不错的选择。   使用websocket能够实现服务端主动推送消息给客户端,客户端推送消息给服务端,客户端与客户端通信等功能,我们这里以服务端主动推送消息到客户端为例子。 一、服务端模块    1.引入maven与启动类      本文是基于spring boot 2.0,netty4.0开发的,这里只展示netty的包 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.25.Final</version> </dependency>     因为是服务端,所以需要在spring

Netty入门系列(3) --使用Netty进行编解码的操作

天大地大妈咪最大 提交于 2020-04-26 18:54:34
前言 何为编解码,通俗的来说,我们需要将一串文本信息从A发送到B并且将这段文本进行加工处理,如:A将信息文本信息 编码 为2进制信息进行传输。B接受到的消息是一串2进制信息,需要将其 解码 为文本信息才能正常进行处理。 上章我们介绍的Netty如何解决拆包和粘包问题,就是运用了解码的这一功能。 java默认的序列化机制 使用Netty大多是java程序猿,我们基于一切都是对象的原则,经常会将对象进行网络传输,那么对于序列化操作肯定大家都是非常熟悉的。 一个对象是不能直接进行网络I/O传输的,jdk默认是将对象转换为可存储的字节数组来进行网络操作。基于JDK默认的序列化机制可以避免操作底层的字节数组,从而提升开发效率。 jdk默认的序列化机制虽然能给程序猿带来极大的方便,但是它也带来了许多问题: 无法跨语言。 序列化后的码流太大,会给网络传输带来极大的开销。 序列化的性能太低,对于高性能的网络架构是极其不友好的。 主流的编解码框架 Google的Protobuf。 Facebok的Thrift。 Jboss Marshalling MessagePack 这几类编解码框架都有各自的特点,有兴趣的童鞋可以自己对其进行研究。 我们这里主要对MessagePack进行讲解。 MessagePack简介 MessagePack是一个高效的二进制序列化框架

Netty中json编解码器(gson实现编码 fastjson实现解码)

谁说胖子不能爱 提交于 2020-04-26 17:36:35
1.ProtoMgr.java package com.my.Game.Proto; import com.alibaba.fastjson.JSON; import com.google.gson.Gson; import com.google.gson.GsonBuilder; public class ProtoMgr { static private GsonBuilder gb = new GsonBuilder(); static private final Gson gson; static { gb.disableHtmlEscaping(); gson = gb.create(); } /** * json编码器 * * @param ctype * @param body * @return */ public static String jsonEncode(int ctype, Object body) { String json = gson.toJson(new Body(ctype, body)); return json; } /** * json解码器 * * @param json * @param tClass * @param <T> * @return */ public static <T> T jsonDecode(String

Netty 入门与实战仿写微信IM即时通讯系统

…衆ロ難τιáo~ 提交于 2020-04-26 17:13:36
课程介绍: 你会学到什么? 服务端如何启动 客户端如何启动 长连自定义协议如何设计 粘包拆包原理与实践 如何实现自定义编解码 pipeline 与 channelHandler 心跳与空闲检测 课程目录: 0仿微信 IM 系统简介.html 1Netty 是什么?.html 2Netty 环境配置.html 3服务端启动流程.html 4客户端启动流程.html 5实战:客户端与服务端双向通信.html 6数据传输载体 ByteBuf 介绍.html 7客户端与服务端通信协议编解码.html 8实战:实现客户端登录.html 9实战:实现客户端与服务端收发消息.html 10pipeline 与 channelHandler.html 11实战:构建客户端与服务端 pipeline.html 12实战:拆包粘包理论与解决方案.html 13channelHandler 的生命周期.html 14实战:使用 channelHandler 的热插拔实现客户端身份校验.html 15实战:客户端互聊原理与实现.html 16实战:群聊的发起与通知.html 17实战:群聊的成员管理(加入与退出,获取成员列表).html 18实战:群聊消息的收发及 Netty 性能优化.html 19实战:心跳与空闲检测.html 20小册总结.html 21小册读者总结.html 22扩展:进阶学习