netty实现websocket通信
调用注意:
1、端口一定要是可以访问的。
2、依赖必须注意和其他版本冲突,比如redis的springboot starter包,会与5.0+版本冲突。
<netty.version>4.1.74.Final</netty.version>
<dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>${netty.version}</version>
</dependency>
首先创建socket服务
@Component
@Slf4j
public class NettyWebSocketServer extends Thread {public static String MsgCode = "GBK";public Integer port=8099;@Overridepublic void run() {startServer();}private void startServer() {EventLoopGroup bossGroup = null;EventLoopGroup workGroup = null;ServerBootstrap serverBootstrap = null;ChannelFuture future = null;try {//初始化线程组bossGroup = new NioEventLoopGroup();workGroup = new NioEventLoopGroup();//初始化服务端配置serverBootstrap = new ServerBootstrap();//绑定线程组serverBootstrap.group(bossGroup, workGroup).channel(NioServerSocketChannel.class).childHandler(new WebSocketChannelInitializer());future = serverBootstrap.bind(new InetSocketAddress(port)).sync();log.info(" *************Web Socket服务端启动成功 Port:{}*********** ", port);} catch (Exception e) {log.error("Web Socket服务端启动异常", e);} finally {if (future != null) {try {future.channel().closeFuture().sync();} catch (InterruptedException e) {log.error("channel关闭异常:", e);}}if (bossGroup != null) {//线程组资源回收bossGroup.shutdownGracefully();}if (workGroup != null) {//线程组资源回收workGroup.shutdownGracefully();}}}}
创建WebSocketChannelInitializer,配置请求目录、handle类,以及请求的最大内容
public class WebSocketChannelInitializer extends ChannelInitializer<SocketChannel> {protected void initChannel(SocketChannel socketChannel) throws Exception {ChannelPipeline pipeline = socketChannel.pipeline();pipeline.addLast(new HttpServerCodec());pipeline.addLast(new ChunkedWriteHandler());pipeline.addLast(new HttpObjectAggregator(5000));pipeline.addLast(new WebSocketServerProtocolHandler("/ws"));pipeline.addLast(new TextWebSocketFrameHandle());}
}
channelRead0方法可以处理收到的消息,并回复,如果实现聊天功能需要记录channel,然后通过channel来回复
@Slf4j
public class TextWebSocketFrameHandle extends SimpleChannelInboundHandler<TextWebSocketFrame> {@Overrideprotected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception {log.info("收到消息:" + msg.text());ctx.channel().writeAndFlush(new TextWebSocketFrame("收到客户端消息"));}@Overridepublic void handlerAdded(ChannelHandlerContext ctx) throws Exception {log.info("handlerAdded:" +ctx.channel().id().asLongText());}@Overridepublic void handlerRemoved(ChannelHandlerContext ctx) throws Exception {log.info("handlerAdded:" +ctx.channel().id().asLongText());}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {log.error("异常发生");ctx.close();}
}
web调用的地址为:ws://localhost:8099/ws
相关文章:
netty实现websocket通信
调用注意: 1、端口一定要是可以访问的。 2、依赖必须注意和其他版本冲突,比如redis的springboot starter包,会与5.0版本冲突。 <netty.version>4.1.74.Final</netty.version> <dependency><groupId>io…...
两个list如何根据一个list中的属性去过滤掉另一个list中不包含这部分的属性,用流实现
你可以使用Java 8的流来实现这个功能。假设你有两个包含对象的List,每个对象有一个属性,你想根据一个List中的属性值来过滤掉另一个List中不包含这个属性值的对象。下面是一种使用流的方式来实现这个功能 import java.util.ArrayList; import java.util…...
Blender 混合现实3D模型制作指南【XR】
本教程分步展示如何: 减少 3D 模型的多边形数量,使其满足 Microsoft Dynamics 365 Guides 和使用 Microsoft Power Apps 创建的应用程序中包含的混合现实组件的特定性能目标的性能需求。将 3D 模型的多种材质(颜色)组合成可应用于…...
kubeasz在线安装K8S集群单master集群(kubeasz安装之二)
一、介绍 Kubeasz 是一个基于 Ansible 自动化工具,用于快速部署和管理 Kubernetes 集群的工具。它支持快速部署高可用的 Kubernetes 集群,支持容器化部署,可以方便地扩展集群规模,支持多租户,提供了强大的监控和日志分…...
『C语言』数据在内存中的存储规则
前言 小羊近期已经将C语言初阶学习内容与铁汁们分享完成,接下来小羊会继续追更C语言进阶相关知识,小伙伴们坐好板凳,拿起笔开始上课啦~ 一、数据类型的介绍 我们目前已经学了基本的内置类型: char //字符数据类型 short …...
基于ssm+vue的新能源汽车在线租赁管理系统源码和论文PPT
基于ssmvue的新能源汽车在线租赁管理系统源码和论文PPT010 开发环境: 开发工具:idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具:navcat,小海豚等 开发技术:java ssm tomcat8.5 摘 要 随着科学技术的飞速发展࿰…...
深入解析IDS/IPS与SSL/TLS和网络安全
目录 防火墙 IDS IPS DMZ VPN VPS SSL/TLS 动态IP 静态IP 防火墙 防火墙是一种网络安全设备,用于监控和控制网络流量,保护网络免受未经授权的访问、恶意攻击和威胁。防火墙可以基于规则进行数据包过滤,允许或阻止特定类型的流量通过…...
在Visual Studio上,使用OpenCV实现人脸识别
1. 环境与说明 本文介绍了如何在Visual Studio上,使用OpenCV来实现人脸识别的功能 环境说明 : 操作系统 : windows 10 64位Visual Studio版本 : Visual Studio Community 2022 (社区版)OpenCV版本 : OpenCV-4.8.0 (2023年7月最新版) 实现效果如图所示࿰…...
搭建openGauss 5.0 一主一从复制集群
openGauss是一款支持SQL2003标准语法,支持主备部署的高可用关系型国产数据库。 多种存储模式支持复合业务场景,新引入提供原地更新存储引擎。NUMA化数据结构支持高性能。Paxos一致性日志复制协议,主备模式,CRC校验支持高可用。支…...
Docker碎碎念
docker和虚拟机的区别 虚拟机(VM)是通过在物理硬件上运行一个完整的操作系统来实现的。 每个虚拟机都有自己的内核、设备驱动程序和用户空间,它们是相互独立且完全隔离的。 虚拟机可以在不同的物理服务器之间迁移,因为它们是以整…...
【C++】extern
目录 1. 变量声明和定义的关系 2. 默认状态下,const对象仅在文件内有效 3. 链接指示:extern "C" 3.1 声明一个非C的函数 3.2 链接指示与头文件 3.3 指向extern "C"函数的指针 3.4 链接指示对整个声明都有效 3.5 导出C函数到…...
2023全网Mysql 合集(25w字)附课程 从安装到高级,实战
mysql学习 1.安装mysql 安装教程 2.mysql的详细学习教程 mysql的详细教程 3.mysql 的高级优化 MySQL高级篇(SQL优化、索引优化、锁机制、主从复制) 4.MySQL 面试 MySQL数据库面试题总结 二.mysql实战 一、创建数据表并插入数据 1、学生表 Stud…...
张俊林:由ChatGPT反思大语言模型(LLM)的技术精要
转自:https://mp.weixin.qq.com/s/eMrv15yOO0oYQ-o-wiuSyw 导读:ChatGPT出现后惊喜或惊醒了很多人。惊喜是因为没想到大型语言模型(LLM,Large Language Model)效果能好成这样;惊醒是顿悟到我们对LLM的认知及发展理念&a…...
单机编排docker compose
Docker之旅(8)-单机编排docker compose 当在宿主机启动较多的容器时候,如果都是手动操作会觉得比较麻烦而且容易出错, 并且每个容器之间也会有先后启动的顺序依赖等。这个时候推荐使用 docker 单机 编排工具 docker-compose,docker-compose …...
C++ 面向对象三大特性——多态
✅<1>主页:我的代码爱吃辣 📃<2>知识讲解:C 继承 ☂️<3>开发环境:Visual Studio 2022 💬<4>前言:面向对象三大特性的,封装,继承,多态ÿ…...
相同数字的积木游戏
题目描述 题目描述 小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同目所处位置最远的2块积木块,计算…...
安防监控视频云存储EasyCVR平台H.265转码功能更新:新增分辨率配置
安防视频集中存储EasyCVR视频监控综合管理平台可以根据不同的场景需求,让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上,视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频云存储、视频存储…...
图数据库_Neo4j学习cypher语言_常用函数_关系函数_字符串函数_聚合函数_数据库备份_数据库恢复---Neo4j图数据库工作笔记0008
然后再来看一些常用函数,和字符串函数,这里举个例子,然后其他的 类似 可以看到substring字符串截取函数 可以看到截取成功 聚合函数 这里用了一个count(n) 统计函数,可以看到效果 关系函数,我们用过就是id(r) 可以取出对应的r的id来这样.....
LeetCode150道面试经典题-- 加一(简单)
1.题目 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 2.示例 示例 1: 输入&am…...
Centos7 配置Docker镜像加速器
docker实战(一):centos7 yum安装docker docker实战(二):基础命令篇 docker实战(三):docker网络模式(超详细) docker实战(四):docker架构原理 docker实战(五):docker镜像及仓库配置 docker实战(六):docker 网络及数据卷设置 docker实战(七):docker 性质及版本选择 认知升…...
思源宋体TTF终极指南:7字重开源字体深度解析与实战应用
思源宋体TTF终极指南:7字重开源字体深度解析与实战应用 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为商业项目寻找既专业又免版税的中文字体解决方案吗?…...
STEP3-VL-10B真实案例分享:数学题图解、文档OCR、GUI定位全演示
STEP3-VL-10B真实案例分享:数学题图解、文档OCR、GUI定位全演示 1. 模型简介与核心能力 STEP3-VL-10B是阶跃星辰(StepFun)开源的轻量级多模态基础模型,拥有10B参数量,在视觉感知、复杂推理和人类对齐能力方面表现出色…...
不止于采集:用BrainFlow解锁DeepBCI脑电信号的进阶玩法(特征提取与简单分类)
不止于采集:用BrainFlow解锁DeepBCI脑电信号的进阶玩法(特征提取与简单分类) 当你已经能够稳定采集到DeepBCI设备的脑电信号时,那些跳动的波形背后隐藏着怎样的秘密?本文将带你跨越数据采集的门槛,探索如何…...
【计算机网络】0.0.0.0与127.0.0.1的深度解析:从本地回环到默认路由的实战应用
1. 从一次奇怪的连接问题说起 那天我在调试一个本地服务时遇到了件怪事:用服务器的内网IP(192.168.1.100)、127.0.0.1甚至直接输入0都能成功连接。这让我意识到很多开发者其实并不真正理解这些特殊IP地址的行为差异。就像开车时只知道踩油门能…...
RTX 4060笔记本也能玩转AI绘画?Nunchaku FLUX.1-dev量化版亲测体验报告
RTX 4060笔记本也能玩转AI绘画?Nunchaku FLUX.1-dev量化版亲测体验报告 1. 开箱即用的AI绘画体验 作为一名长期使用中端显卡的AI爱好者,当我第一次听说Nunchaku FLUX.1-dev量化版可以在RTX 4060笔记本上运行时,内心充满了怀疑。毕竟&#x…...
NaViL-9B效果实录:复杂场景下中英文混合文字识别准确率达98.2%
NaViL-9B效果实录:复杂场景下中英文混合文字识别准确率达98.2% 1. 模型介绍 NaViL-9B是一款原生多模态大语言模型,由专业研究机构开发。它能够同时处理纯文本问答和图片理解任务,特别擅长复杂场景下的文字识别。在实际测试中,该…...
A股数据仓库搭建指南:5分钟拥有专属本地金融数据库
A股数据仓库搭建指南:5分钟拥有专属本地金融数据库 【免费下载链接】AShareData 自动化Tushare数据获取和MySQL储存 项目地址: https://gitcode.com/gh_mirrors/as/AShareData 还在为A股数据分析而烦恼吗?每次研究都要重新下载数据,既…...
SLAM Toolbox完整指南:从零开始掌握机器人定位与建图技术
SLAM Toolbox完整指南:从零开始掌握机器人定位与建图技术 【免费下载链接】slam_toolbox Slam Toolbox for lifelong mapping and localization in potentially massive maps with ROS 项目地址: https://gitcode.com/gh_mirrors/sl/slam_toolbox 想象一下&a…...
RMBG-2.0应用案例:如何快速处理社交媒体配图
RMBG-2.0应用案例:如何快速处理社交媒体配图 1. 社交媒体配图的痛点与解决方案 在当今内容爆炸的时代,社交媒体配图的质量直接影响着内容的传播效果。无论是个人博主还是企业账号,每天都需要制作大量配图来吸引用户注意力。然而,…...
手机高频麦克风音频采样技术
随着移动终端音频应用的多元化发展,从超声通信、高频声纹识别到医疗级音频监测,对手机麦克风的高频采样能力提出了更高要求。手机高频麦克风音频采样技术,是实现高频音频信号捕捉、传输与后续处理的核心支撑,其性能直接决定了高频…...
