netty websocket学习

【硬核】肝了一月的Netty知识点

超详细Netty入门,看这篇就够了!

vue+websokect实现实时聊天,可单聊、可群聊(一)
vue实现聊天栏定位到最底部(超简单、可直接复制使用)
vue实现指定div右键显示菜单,并实现复制内容到粘贴板

Springboot实现websocket(连接前jwt验证token)

vue中audio标签自定义音频播放栏

netty-websocket 鉴权token及统一请求和响应头(鉴权控制器)

一个优秀活跃的视频转码项目分享

动手打造属于自己的直播间(Vue+SpringBoot+Nginx)

42-Netty基础-Websocket-Netty握手源码分析 - B站视频 - 很详细
43-FrameDecoder源码分析
44-Netty基础-WebSocket08FrameEncoder源码分析
46-Netty基础-WebSocket-HandshakeComplete握手成功事件
47-Netty基础-WebSocket-DefaultChannelGroup消息群发

【netty专栏】 - 待学习

WebSocket协议:5分钟从入门到精通

SpringBoot+Netty+WebSocket实现在线聊天 有对应的B站视频和代码-已fork - 代码

SpringBoot 整合 Netty + Websocket

Spring boot 项目(二十三)------用 Netty+Websocket实现聊天室

springBoot + netty搭建高性能 websocket 服务 & 性能测试(包含python 测试脚本)
springBoot使用webSocket的几种方式以及在高并发出现的问题及解决

SpringBoot2+Netty+WebSocket(netty实现websocket,支持URL参数)
SpringBoot整合Netty处理WebSocket(支持url参数)
使用Netty处理WebSocket请求

SpringBoot 集成 Netty 使用WebSocket功能,并实现token校验

微服务springcloud环境下基于Netty搭建websocket集群实现服务器消息推送----netty是yyds

SpringBoot2+Netty+WebSocket(netty实现websocket)

SpringBoot 整合 Netty 实现 WebSocket

Netty实战,Springboot + netty +websocket 实现推送消息

springboot实现webrtc

更新啦,SpringBoot+websocket聊天-增加语音功能

Springboot整合WebSocket实现网页版聊天,快来围观!

Spring WebSocket传递多媒体消息

Springboot+Netty搭建分布式的WebSocket简单集群,后续完善即时通讯聊天系统

EasyMedia项目 --- Springboot、netty实现的http-flv、websocket-flv直播点播,支持rtsp、h264、h265、rtmp等多种源,h5纯js播放(不依赖flash),不需要nginx等第三方拉流服务

js Blob、ArrayBuffer(Uint8Array、TypedArray、DataView)、Buffer、DataUrl
【OFD】ArrayBuffer 和 Uint8Array

java 复制代码
package com.zzhua.test06;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.http.*;
import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolConfig;
import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;

public class NettyWsServer {
    public static void main(String[] args) throws InterruptedException {

        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup(16);

        try {

            ServerBootstrap serverBootstrap = new ServerBootstrap();

            serverBootstrap.group(bossGroup, workerGroup)
                    .channel(NioServerSocketChannel.class)
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            ch.pipeline().addLast("http-decoder", new HttpRequestDecoder());
                            ch.pipeline().addLast("http-encoder", new HttpResponseEncoder());
                            ch.pipeline().addLast("aggregator", new HttpObjectAggregator(65536));
                            WebSocketServerProtocolConfig wsServerConfig = WebSocketServerProtocolConfig.newBuilder()
                                    .websocketPath("/websocket")
                                    .maxFramePayloadLength(Integer.MAX_VALUE)
                                    .checkStartsWith(true).build();
                            ch.pipeline().addLast("websocketHandler", new WebSocketServerProtocolHandler(wsServerConfig));
                            ch.pipeline().addLast("wsTextHandler", new WsTextHandler());
                        }
                    });

            ChannelFuture channelFuture = serverBootstrap.bind(8080).sync();
            channelFuture.channel().closeFuture().sync();

        } finally {
            workerGroup.shutdownGracefully();
            bossGroup.shutdownGracefully();
        }

    }
}
java 复制代码
package com.zzhua.test06;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.http.websocketx.PingWebSocketFrame;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
import io.netty.handler.codec.http.websocketx.WebSocketFrame;

import java.nio.charset.StandardCharsets;

public class WsTextHandler extends SimpleChannelInboundHandler<WebSocketFrame> {

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, WebSocketFrame msg) throws Exception {
        System.out.println("收到消息: " + msg.content().toString(StandardCharsets.UTF_8));
        TextWebSocketFrame textWebSocketFrame = new TextWebSocketFrame();
        textWebSocketFrame.content().writeBytes("收到了".getBytes());
        ctx.channel().writeAndFlush(textWebSocketFrame);
    }
}
js 复制代码
<script>
     var ws = new WebSocket('ws://localhost:8080/websocket')
     ws.onmessage  = msg => {
         console.log('收到消息: ' + msg.data);
     }

     ws.onclose = () => {
         console.log('关闭连接');
     }

     ws.onerror = () => {
         console.log('连接错误');
     }

     ws.onopen = function (event) {
         console.log("建立连接成功")
         ws.send('halo')
     }

     
 </script>
相关推荐
敬往事一杯酒哈6 小时前
海康 AGV 导航读码器学习
学习
qq_284274058 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
qq_284274059 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
Titan202410 小时前
MySQL访问个人学习笔记
笔记·学习·mysql
十年Java程序媛10 小时前
Java 接口和抽象类对比|Java8 新特性,抛弃老旧八股,正确选型
java·spring boot·后端
小雪崩11 小时前
嵌入式学习 day64:字符设备驱动
学习
个 人 练 习 生12 小时前
C++ string 类模拟实现:从底层理解字符串(上)
开发语言·c++·经验分享·学习·程序人生
坤坤子吖12 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
for_ever_love__12 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结
SL_staff13 小时前
设备越多系统越崩?根源在三层抽象失效
spring boot·物联网·github