netty从入门到精通——websocket简介

本文深入解析了HTTP协议的无状态性和基于请求响应的工作模式,对比了HTTP1.0与HTTP1.1的区别,特别是keepAlive特性。同时,文章详细阐述了WebSocket如何实现浏览器与服务器的长连接,以及其在节省网络带宽方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Http协议:无状态的基于请求和响应的链接 ;
无状态:相同的客户端分别两次发出请求,而服务端并不知道这两次请求来自哪一个客户端,冰球这两次请求也没有什么关联,造成了http请求的一种局限性。
请求和响应模式:一定是由客户端首先向服务端发起请求,发起请求的同时建立连接,请求和响应都是在建立连接之上完成的。请求完成之后,调用相应的doget/doPost请求,之后建立Response对象,将信息返回给客户端。如果是基于http1.0协议的话,当服务端吧响应返回给客户端之后,,连接就会断掉。重复此过程。
如果基于http1.1协议的话,增加了keepAlive特性,客户端和服务端在短时间内可以保持连接,这个是时间叫做持续连接(服务端与客户端先建立好连接,客户端向服务端发送请求,服务器端返回一个响应,在指定的时间内,客户端还会向服务端发送请求,这是不会重新再建立连接,而是根据已经有的链接去发送请求)

WebSocket实现的意义:
1.实现了浏览器与服务器端之间的长链接(真正意义的长链接,客户端与服务端建立连接之后,不会断掉。)
2.长链接只有在初次建立的时候客户端会向服务端发送一些请求(请求头和请求信息), 一旦建立好之后客户端与服务器之端在此长链接之上,只需要发送真正的数据本身,不需要在发送请求头信息,这在很大程度上节省了网络 带宽。
webSocket特点:
1.全双工的消息的传递
2本身基于http协议
3.也可以用于非浏览器的方式链接技术(app)
4.websocket需要服务器对此支持

### Netty 入门精通教程 #### 了解Netty及其重要性 Netty是一个功能强大、灵活且易于使用的网络编程框架[^1]。它不仅简化了TCP/IP协议栈的操作,还提供了丰富的API来处理各种复杂的通信需求。 #### 掌握基本概念 理解Netty中的两个主要事件流对于掌握该工具至关重要: - **Inbound入站事件**:这些事件由Netty内部触发,最终被应用程序代码所消费。这通常涉及接收数据并将其传递给处理器链。 - **Outbound出站事件**:这类事件则相反,它们起源于应用层逻辑,并向远程端发送指令或消息,在此过程中会被Netty接管直至完成传输过程[^2]。 #### 学习核心组件 为了更好地利用Netty的功能,熟悉以下几个关键部分是非常必要的: - **Channel**: 表示一个特定客户端连接的状态和配置;它是所有I/O操作的基础单元。 - **EventLoopGroup**: 负责管理一组线程池资源用于执行异步任务。 - **ChannelHandler/ChannelPipeline**: 定义了一组拦截器样式的处理器,可以用来解码、编码或者修改进出的数据包。 #### 编写第一个程序实例 下面给出一段简单的Echo服务器代码作为入门练习: ```java import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; public class EchoServer { public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); // (1) b.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) // (2) .childHandler(new EchoServerInitializer()); // (3) ChannelFuture f = b.bind(8080).sync(); // (4) System.out.println("Server started and listening on port " + 8080); f.channel().closeFuture().sync(); // (5) } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); } } } ``` 这段代码展示了如何创建一个监听指定端口的服务端,并等待来自客户端的消息请求。 #### 进一步深入研究 当掌握了基础知识之后,可以通过阅读官方文档深入了解更复杂的话题如性能优化技巧、安全特性集成等。此外,实践项目开发也是提高技能水平的有效途径之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值