基于Netty的WEB聊天服务端开发|Java 开发实战

简介: 基于Netty的WEB聊天服务端开发|Java 开发实战

1.主要采用了Netty的什么功能



webSocket的wss    
复制代码


//wss配置
@Override
public void initChannel(SocketChannel ch) throws Exception {
  ChannelPipeline pipeline = ch.pipeline();
  pipeline.addLast(new IdleStateHandler(10, 0, 0, TimeUnit.SECONDS));
  pipeline.addLast(new HttpServerCodec());
  pipeline.addLast(new HttpObjectAggregator(1024 * 1024));
  pipeline.addLast(new ChunkedWriteHandler());
  // pipeline.addLast(new HttpRequestHandler("/ws"));
  pipeline.addLast(new WebSocketServerProtocolHandler("/ws", null, true, 1024 * 512));
  // pipeline.addLast(new HeartbeatServerHandler());
  pipeline.addLast(new TextWebSocketFrameHandler());
  // 配置ssl访问的
  logger.info(WebsocketChatServerInitializer.class.getResource("/").toString());
  URL xmlpath = this.getClass().getClassLoader().getResource("");
  logger.info(xmlpath.toString());
  // File f = new File(this.getClass().getResource("/").getPath());
  File f = new File(WebsocketChatServerInitializer.class.getResource("").toString());
  logger.info(f.getAbsolutePath());
  SSLContext sslContext = SslUtil.createSSLContext("PKCS12",
        this.getClass().getClassLoader().getResourceAsStream("keystore.p12"), "changeit"); 
       SSLEngine engine =sslContext.createSSLEngine();
  SSLEngine sslEngine = sslContext.createSSLEngine();
  sslEngine.setNeedClientAuth(false);
  sslEngine.setUseClientMode(false);
  pipeline.addFirst(new SslHandler(sslEngine));
    }
复制代码


2.WEB聊天的基本流程和一些限制



2.1消息采用wss发送
  2.2首先前端用户先在服务端登录,获取token,然后连接websocket绑定服务端.
     为了防止恶意连接保存token的时候时候key为:前缀_用户名
  2.3服务端校验token后会保存一个键值对,用户名:Channel
     为了防止恶意信息的发送,在发送消息的时候会根据用户名获取Channel,然后当前的Channel和获取到的Channel可以做个比对,这样用户就是正常用户了
  2.4web端绑定了服务端后可以进行消息的收发,消息格式为JSON
     Netty服务端主要通过保存的Channel获取连接,然后做信息转发推送
  2.5配置个后台管理的模块,对用户进行强制管理,后消息广播
复制代码


3.消息格式



整体格式
{
    "cmd":null,
    "mdChild":ull,
    "from":null,
    "accept":null,
    "group":null,
    "msg":null,
    "status":null,
    "id":null,
    "createDate":"2021-01-09 22:26:14",
    "chatSet":null,
    "groupSet":null,
    "oldMsg":null
}
单聊
{
    "cmd":"3",
    "from":{
        "userCode":"dnmt"
    },
    "accept":{
        "userCode":"fhx"
    },
    "msg":"单聊测试"
}
群聊
{
    "cmd":"4",
    "from":{
        "userCode":"dnmt"
    },
    "group":{
        "groupCode":"g003"
    },
    "msg":"群聊测试"
}
复制代码


4服务端的扩展



3.1因为当用户量变大,服务端可能处理有些跟不上。
     这里可以采用的是服务端集群部署。
  3.2集群部署问题
     消息的转发可能会跨服务器进行推送?
     用户的跨服务器绑定?
  3.3netty集群解决跨服务器消息推送思路
     采用redis的发布和订阅进行消息的转发,当前获取订阅消息判断用户是否存在,如果存在就进行消息处理。
 3.4用户的跨服务器绑定。
     这里用到了zookeeper
     当服务器启动的时候,会把服务器的连接信息发送到zookeeper上
     当用户登录的时候,可以根据一个简单的负载均衡算法(随机、或者最小)获取netty服务器的绑定信息,然后绑定到后端服务器。
 3.5进一步性能提升
    服务端在处理转发消息的时候,采用线程池处理。
复制代码


5.以玩转的地方



1.支持了WEB的语音、和视频聊天
    刚开始的时候是采用了peerjs的WEBRTC方式,进行的视频聊天,但是对node不了解和感觉这样不可控,采用了下面的方式。
  2.通过WEBRTC的浏览器音频,视频录制功能,定时获取到数据,然后进行base64编码进行数据传输,转发到web端解码进行音视频聊天。
  3.在视频聊天的时候,可以借助opencv进行一些对视频的操作(这里是我开始学习opencv的地方)
    简单的例子:视频中人脸识别的思路,首先提取视频文件的音频(ffmpeg),然后对视频跳帧(主要想提高点速度)的处理获取每帧的图片,处理完毕后提取的音频和新的视频文件合并,然后编码进行视频流转发
复制代码


6.项目地址欢迎star

相关文章
|
1月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
196 4
|
2月前
|
存储 前端开发 Java
【JAVA】Java 项目实战之 Java Web 在线商城项目开发实战指南
本文介绍基于Java Web的在线商城技术方案与实现,涵盖三层架构设计、MySQL数据库建模及核心功能开发。通过Spring MVC + MyBatis + Thymeleaf实现商品展示、购物车等模块,提供完整代码示例,助力掌握Java Web项目实战技能。(238字)
297 0
|
2月前
|
存储 JavaScript 安全
Web渗透-XSS漏洞深入及xss-labs靶场实战
XSS(跨站脚本攻击)是常见的Web安全漏洞,通过在网页中注入恶意脚本,窃取用户信息或执行非法操作。本文介绍其原理、分类(反射型、存储型、DOM型)、测试方法及xss-labs靶场实战案例,帮助理解与防御XSS攻击。
730 1
Web渗透-XSS漏洞深入及xss-labs靶场实战
|
5月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
5月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。
|
前端开发 JavaScript Shell
鸿蒙5开发宝藏案例分享---Web页面内点击响应时延分析
本文为鸿蒙开发者整理了Web性能优化的实战案例解析,结合官方文档深度扩展。内容涵盖点击响应时延核心指标(≤100ms)、性能分析工具链(如DevTools时间线、ArkUI Trace抓取)以及高频优化场景,包括递归函数优化、网络请求阻塞解决方案和setTimeout滥用问题等。同时提供进阶技巧,如首帧加速、透明动画陷阱规避及Web组件初始化加速,并通过优化前后Trace对比展示成果。最后总结了快速定位问题的方法与开发建议,助力开发者提升Web应用性能。
|
5月前
|
JSON 开发框架 自然语言处理
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)
本文主要介绍了应用开发中的三大核心内容:生命周期管理、资源限定与访问以及多语言支持。在生命周期部分,详细说明了应用和页面的生命周期函数及其触发时机,帮助开发者更好地掌控应用状态变化。资源限定与访问章节,则聚焦于资源限定词的定义、命名规则及匹配逻辑,并阐述了如何通过 `$r` 引用 JS 模块内的资源。最后,多语言支持部分讲解了如何通过 JSON 文件定义多语言资源,使用 `$t` 和 `$tc` 方法实现简单格式化与单复数格式化,为全球化应用提供便利。
247 104
|
5月前
|
JavaScript 前端开发 API
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
本文介绍了HarmonyOS应用开发中的HML、CSS和JS语法。HML作为标记语言,支持数据绑定、事件处理、列表渲染等功能;CSS用于样式定义,涵盖尺寸单位、样式导入、选择器及伪类等特性;JS实现业务逻辑,包括ES6语法支持、对象属性、数据方法及事件处理。通过具体代码示例,详细解析了页面构建与交互的实现方式,为开发者提供全面的技术指导。
263 104
|
5月前
|
开发框架 编解码 JavaScript
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(一)
该文档详细介绍了一个兼容JS的类Web开发范式的方舟开发框架,涵盖概述、文件组织、js标签配置及app.js等内容。框架采用HML、CSS、JavaScript三段式开发方式,支持单向数据绑定,适合中小型应用开发。文件组织部分说明了目录结构、访问规则和媒体文件格式;js标签配置包括实例名称、页面路由和窗口样式信息;app.js则描述了应用生命周期与对象管理。整体内容旨在帮助开发者快速构建基于方舟框架的应用程序。
258 102
|
2月前
|
安全 Linux PHP
Web渗透-命令执行漏洞-及常见靶场检测实战
命令执行漏洞(RCE)指应用程序调用系统命令时,用户可控制输入参数,导致恶意命令被拼接执行,从而危害系统安全。常见于PHP的system、exec等函数。攻击者可通过命令连接符在目标系统上执行任意命令,造成数据泄露或服务瘫痪。漏洞成因包括代码层过滤不严、第三方组件缺陷等。可通过参数过滤、最小权限运行等方式防御。本文还介绍了绕过方式、靶场测试及复现过程。
824 0