[完结14章]SpringCloud+Netty集群实战千万级 IM系统

马尚
• 阅读 81

一、什么是Netty? Netty 是由 JBOSS 提供的一个 Java 开源框架, 现为 Github 上的独立项目,它是一个异步的、 基于事件驱动的网络应用框架, 用以快速开发高性能、 高可靠性的网络 IO 程序。Netty 主要针对在 TCP 协议下, 面向 Clients 端的高并发应用, 或者 Peer-to-Peer 场景下的大量数据持续传输的应用。Netty 本质是一个 NIO 框架, 适用于服务器通讯相关的多种应用场景。netty安装包下载:pan.baidu.com/s/1cgw8Ez--ox850XYAdvIzSA 提取码:jsx1

二、netty做集群 channel如何共享? 方案一: netty 集群,通过rocketmq等MQ 推送到所有netty服务端,channel 共享无非是要那个通道都可以发送消息向客户端 方案二: MQ广播+ 多Netty ,Netty收到MQ消息后,如果本地存储有该channel,就发送,没有存储就忽略,完美解决,不需要做channel的共享。

这里使用rabbitmq的订阅发布的广播模式(如果有其他服务可以使用Topic) 1、添加配置文件 org.springframework.boot spring-boot-starter-amqp 2.5.5 org.projectlombok lombok 1.18.20 org.springframework.boot spring-boot-starter-test 2.0.3.RELEASE

三、netty的三大特点 ①高并发:Netty 是一款基于 NIO(Nonblocking IO,非阻塞IO)开发异步事件驱动的高性能网络通信框架,nio使用了select模型(多路复用器技术),从而使得系统在单线程的情况下可以同时处理多个客户端请求。Netty使用了Reactor模型,Reactor模型有三种多线程模型,netty是在主从 Reactor 多线程模型上做了一定的改进。Netty有两个线程组,一个作为bossGroup线程组,负责客户端接收,一个workerGroup线程组负责工作线程的工作(与客户端的IO操作和任务操作等等),Netty 的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果。他的并发性能得到了很大提高。 ②传输快:Netty 的传输依赖于零拷贝特性,实现了更高效率的传输。零拷贝要求内核(kernel)直接将数据从磁盘文件拷贝到Socket缓冲区(套接字),而无须通过应用程序。零拷贝减少不必要的内存拷贝,不仅提高了应用程序的性能,而且减少了内核态和用户态上下文切换。 ③封装好:Netty 封装了 NIO 操作的很多细节,提供了易于使用调用接口。

四、IM开发流程 技术细节: 1、Java后端开发: 使用Spring Boot框架搭建后端服务,利用Spring MVC实现RESTful API,处理用户请求和消息传输。 2、UniApp前端开发: 基于Vue.js的UniApp框架进行前端开发,实现跨平台的安卓APP、苹果APP、小程序和H5端。 3、实时通讯协议: 基于WebSocket协议实现实时通讯功能,确保消息的快速传输和及时响应。 4、数据库管理: 使用MySQL作为主数据库存储用户信息和聊天记录,利用Redis作为缓存数据库提升系统性能。 5、数据安全与用户认证: 使用JWT进行用户认证和权限管理,同时利用SSL/TLS加密技术保障数据传输的安全性。 6、服务器部署与管理: 将应用部署在云服务器上,使用Docker进行容器化部署,利用Nginx进行负载均衡和反向代理。

开发过程: 1、需求分析与规划: 与产品经理和设计师一起分析用户需求,确定功能模块和技术选型,制定开发计划和时间表。 2、UI设计与原型制作: 设计师根据需求绘制应用的UI界面原型图,与开发团队进行讨论和修改,确保用户界面友好易用。 3、后端开发: 后端团队使用Spring Boot框架搭建应用后端,实现用户管理、消息传输等核心功能。 4、前端开发: 前端团队基于UniApp框架开发跨平台的应用前端,实现界面设计和交互逻辑。 5、数据库设计与开发: 数据库团队设计MySQL数据库结构,包括用户表、聊天记录表等,同时利用Redis进行缓存优化。 6、功能实现与测试: 开发团队根据需求逐步实现各个功能模块,并进行单元测试和集成测试,保证功能的稳定性和可靠性。 7、性能优化与安全加固: 对数据库查询进行优化,利用Redis缓存减轻数据库压力,同时加强安全措施,防范SQL注入和XSS攻击。 8、部署与上线: 在生产环境中部署应用,配置服务器环境和数据库连接,经过全面测试后正式上线发布,向用户提供稳定可靠的服务。

五、具体步骤 1、初始化项目 首先,需要创建一个新的Java项目。 2、添加依赖 在项目的pom.xml文件中添加以下依赖: org.jim jim-client 2.10.1

3、配置数据库 在项目的配置文件中,配置数据库连接信息。

数据库连接配置

jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/im jdbc.username=root jdbc.password=123456

4、创建用户模型 创建一个用户模型,用于表示用户的基本信息。 public class User { private String username; private String password;

// 省略getter和setter方法

}

5、创建消息模型 创建一个消息模型,用于表示消息的内容。 public class Message { private User sender; private User receiver; private String content; private Date sendTime;

// 省略getter和setter方法

}

通过以上步骤,我们可以实现一个简单的Java开源IM系统,实现了用户发送和接收消息的功能。通过本文的介绍,相信小白开发者可以快速上手并理解整个实现过程。当然,这只是一个简单的示例,实际开发中还需要考虑更多的细节和功能。希望本文对您有所帮助!

点赞
收藏
评论区
推荐文章
威尔we 威尔we
3年前
Netty 高性能网络协议服务器开发
本文通过一个实例来讲解如何使用框架来开发网络协议服务器,项目使用工具来构建和运行,并且支持部署。项目代码已在GitHub开源,。Netty简介Netty是一个异步、事件驱动的网络应用框架,使用它可以快速开发出可维护良好的、高性能的网络协议服务器。它大幅简化和流程化了网络编程,比如TCP和UDP套接字服务器开发。难能
Netty服务端开发及性能优化 | 京东云技术团队
Netty是一个异步基于事件驱动的高性能网络通信框架,可以看做是对NIO和BIO的封装,并提供了简单易用的API、Handler和工具类等,用以快速开发高性能、高可靠性的网络服务端和客户端程序。
Stella981 Stella981
2年前
Netty序章之BIO NIO AIO演变
Netty序章之BIONIOAIO演变Netty是一个提供异步事件驱动的网络应用框架,用以快速开发高性能、高可靠的网络服务器和客户端程序。Netty简化了网络程序的开发,是很多框架和公司都在使用的技术。更是面试的加分项。Netty并非横空出世,它是在BIO,NIO,AIO演变中的产物,是一种
Stella981 Stella981
2年前
BIO、NIO、AIO系列二:Netty
一、概述Netty是一个Java的开源框架。提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。Netty是一个NIO客户端,服务端框架。允许快速简单的开发网络应用程序。例如:服务端和客户端之间的协议,它简化了网络编程规范。二、NIO开发的问题
Stella981 Stella981
2年前
Netty精粹之设计更快的ThreadLocal
Netty是一款优秀的开源的NIO框架,其异步的、基于IO事件驱动的设计以及简易使用的API使得用户快速构建基于NIO的高性能高可靠性的网络服务器成为可能。Netty除了使用Reactor设计模式加上精心设计的线程模型之外,对于线程创建的具体细节也进行了重新设计,由于Netty的应用场景主要面向高并发高负载的场景下,这也是Netty能够大显身手的场景,因此,
Stella981 Stella981
2年前
Netty 入门初体验
Netty简介Netty是一款异步的事件驱动的网络应用程序框架,支持快速开发可维护的高性能的面向协议的服务器和客户端。Netty主要是对java的nio包进行的封装为什么要使用Netty上面介绍到Netty是一款高性能的网络通讯框架,那么我们为什么要使用Netty,换句话说,
Stella981 Stella981
2年前
Netty网络编程(初识)
Netty简单介绍核心架构图(现在还看不是很懂):!netty(https://static.oschina.net/uploads/img/201712/02192156_X1e5.png"netty")Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高
Stella981 Stella981
2年前
Netty(RPC高性能之道)原理剖析
1,Netty简述Netty是一个基于JAVANIO类库的异步通信框架,用于创建异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性的网络客户端和服务器端RPC高性能分析,请参考文章“【总结】RPC性能之道”特点异步、非阻塞、基于事件驱动的NIO框架支持多种传输层通信协议,包括T
Stella981 Stella981
2年前
Netty入门
一、是什么  Netty是一个高性能、异步事件驱动、基于JavaNIO的异步的可扩展的客户端/服务器网络编程框架。  Netty提供了对TCP、UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过FutureListener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果
Stella981 Stella981
2年前
Netty堆外内存泄露排查与总结
导读Netty是一个异步事件驱动的网络通信层框架,用于快速开发高可用高性能的服务端网络框架与客户端程序,它极大地简化了TCP和UDP套接字服务器等网络编程。Netty底层基于JDK的NIO,我们为什么不直接基于JDK的NIO或者其他NIO框架:1.使用JDK自带的NIO需要了解太多的概念,编程复杂。2