优秀是一种习惯!!!
AmethystFOB   >   标签墙   >   IO 标签

websocket使用问题汇总 有更新!

2023-11-29

websocket使用问题 一、websocket推送功能中只使用session.isOpen()来判断连接是否建立成功可以推送是否可行? WebSocket 推送功能中使用 session.isOpen() 判断连接是否建立成功是不够可靠的。虽然在大多数情况下,isOpen() 方法可以用来检查 WebSocket 连接是否打开,但它并不能保证连接的稳定性和可靠性。 在 WebSocket 建立连接期间,服务器和客户端需要完成一些握手过程,验证双方的身份,协调双方的协议选项等操作。只有在握手成功之后,才能确定 WebSocket 连接已经建立成功。因此,在发送消息前应该确保连接已经完全建立。 如果仅使用 session.isOpen() 来判断连接是否建立成功,可能会忽略掉一些异常情况,例如: 客户端在握手期间关闭了连接。 服务器在握手期间出现异常,导致连接未正常建立。 网络故障或其他原因导致 WebSocket 连接断开。 为了确保 WebSocket 推送的可靠性,我们应该尽可能多地掌握连接状态的信息,并及时处理异常情况。可以考虑使用心跳机制、定时重连、异常监控等方式来提高连接的....

网络编程基础 有更新!

2023-11-28

Netty 一、NIO基础(Non-blocking io 非阻塞IO) 1、三大组件 【管道、缓冲区、选择器】 1、1 Channel & Buffer channel 类似于stream,它是读写数据的双向通道,可以从channel将数据读入buffer,也可以将buffer中数据写入channel,而之前的stream要么是输入,要么是输出,channel比stream更为底层 常见的channel有: FileChannel 【作为文件传输通道】 DatagramChannel 【做UDP网络传输时传输通道】 SocketChannel 【做TCP时传输通道】 ServerSocketChannel 【做TCP时传输通道 专用服务器】 buffer则用来缓冲读写数据,常见的buffer有 ByteBuffer 【抽象类】 MappedByteBuffer 【实现类】 DirectByteBuffer HeapByteBuffer ShortBuffer IntBuffer LongBuffer FloatBuffer DoubleBuffer 1、2 Selector ....

Netty基础 有更新!

2023-11-28

Netty 一、Netty入门 1.1 概述 Netty是一个异步的(这里异步主要指通过多线程完成方法调用和处理结果相分离(因为如果调用方法的线程和接收数据的线程是同一个,那么意味着是同步)指调用时的异步,不是异步IO)、基于事件驱动(即底层多路复用selector)的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端 1.2 Hello Word //客户端向服务器发送HW,服务器接收不返回 /** * 服务端 */ public class HelloServer{ public static void main(String[] args){ // 1.服务启动器,负责组装netty组件,启动服务器 new ServerBootstrap() // 2.NIO基础部分有用到BossEventLoop, WorkerEventLoop(selector, thread), group组 EventLoop包含了线程和选择器 .group(new NioEventLoopGroup()) // 3.选择服务器的ServerSocketChannel实现 .channel(N....

Netty进阶 有更新!

2023-11-28

Netty进阶 一、黏包与半包 1.1 黏包现象 /** * 服务端 */ @Slf4j public class HelloWorldServer{ void start(){ NioEventLoopGroup boss = new NioEventLoopGroup(); NioEventLoopGroup worker = new NioEventLoopGroup(); try{ ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.channel(NioServerSocketChannel.class); // 将接收缓冲区调小些观察半包现象 serverBootstrap.option(ChannelOption.SO_RCVBUF, 10); serverBootstrap.group(boss, worker); serverBootstrap.childHandler(new ChannelInitializer<SocketChannel>(){ @Overr....