Giter VIP home page Giter VIP logo

jichat's Introduction

【JiChat】基于Netty打造百万级用户IM平台:探索可扩展和高性能通信的威力

CircleCI codecov Codacy Badge maven GitHub License Average time to resolve an issue Percentage of issues still open Leaderboard

前言

'JiChat' 的IM系统:不仅支持多客户端登录,还实现了历史消息同步、消息顺序一致性和零消息丢失的特性,同时支持端到端加密会话保护用户隐私。为确保系统的可扩展性,整个架构按照百万级用户流量的标准进行设计,并支持无缝的横向扩展。

系统设计

系统采用了分布式架构,基于 Spring Cloud 实现微服务化,服务注册和发现方面使用 Nacos,消息中间件选择 RabbitMQ,持久性数据存储采用 MySQL 数据库,缓存层使用 Redis。在数据访问层面,使用 MyBatis-Plus 简化数据库操作。服务之间通过 OpenFeign 实现远程调用,以提高服务之间的通信效率。为了满足即时通讯需求,引入了 Netty 框架,以实现高性能、实时的消息传递。

业务流程

image

消息流程

  1. 用户A向聊天服务器1发送聊天消息。
  2. 聊天服务器1从ID生成器获取消息ID。
  3. 聊天服务器1将消息发送到消息同步队列。
  4. 消息存储在键值存储中。
  5. a.如果用户 B 在线,则消息将转发到用户 B 所在的聊天服务器 2连接的。
  6. b. 如果用户 B 离线,则从推送通知 (PN) 服务器发送推送通知。
  7. 聊天服务器2将消息转发给用户B。有一个持久的TCP用户 B 和聊天服务器 2 之间的连接。

消息大略流程: 客户端A→服务端a→服务端b→客户端B

项目部署

(1)安装docker和docker-compose,安装组件

请执行doc目录中的docker-compose.yml文件,以安装RabbitMQ、Nacos、MySQL、Redis等组件。如果Nacos安装失败,请确保在MySQL中初始化Nacos所需的nacos-db.sql文件数据。

(2)启动user-service-app和chat-service-app服务

进行JiChat数据库的初始化,执行jichat_user.sql脚本。然后,修改user-service-app和chat-service-app服务的配置文件,确保连接到正确的RabbitMQ、Nacos、MySQL和Redis地址以及账号信息。最后,启动user-service-app和chat-service-app服务。

(3)启动chat-client客户端

调用user-service-app的注册账号接口后,修改chat-client的application-dev.yaml文件中的用户信息和连接地址,即可启动客户端。为了方便实现通信,建议在dev和test配置文件中使用不同端口和用户id

(4)访问地址

chat-server swagger: http://localhost:18080/chat-api/doc.html#/home
user-server swagger: http://localhost:18081/user-api/doc.html#/home
chat-client swagger: http://localhost:9192/doc.html#/home

项目业务分析博客

JiChat 博客地址 https://blog.csdn.net/weixin_42887222/article/details/135910752

jichat's People

Contributors

jsl1992 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.