Skip to content
This repository has been archived by the owner on Mar 24, 2022. It is now read-only.
/ Sim Public archive

Scala、Spring Boot、Akka HTTP 实现的LayIM

License

Notifications You must be signed in to change notification settings

jxnu-liguobin/Sim

Repository files navigation

Scala CI with Gradle

在线测试地址 http://im.dreamylost.cn 该预览已经是zio实现的zim

在线API文档 swagger-ui

敬请关注进阶版:https://github.com/bitlap/zim 基于scala、zio、tapir、circe、akka-http、scalikejdbc、redis实现的纯异步、函数式、流式API的LayIM。

技术栈

  • 开发语言:Scala
  • 平台:JVM
  • 前端:LayIM 3.0
  • MVC:Spring Boot
  • 数据库:Redis、MySQL
  • DAO:Mybatis
  • 分页:PageHelper
  • 连接池:Druid
  • WebSocket:Akka Actor、Akka HTTP
  • 邮件:Java Mail
  • API文档:Swagger
  • 构建工具:Gradle
  • 代码生成:scala-macro-tools

项目结构

Sim
├─ gradle                                                 - 本项目gradle使用6.5.1,高版本有bug,编译不了
├─ .gitattributes                                         - Git仓库显示语言的配置
├─ .gitignore                                             - Git忽略文件的配置
├─ .scalafmt.conf                                         - Scala代码格式化的配置
├─ README.md
├─ build.gradle
├─ deploy.sh                                              - 部署脚本
├─ settings.gradle
└─ src
       ├─ main
       │    ├─ resources
       │    │    ├─ application.conf                      - Websocket配置:基于Akka实现
       │    │    ├─ application.properties                - Springboot程序配置
       │    │    ├─ data.sql                              - 初始化数据
       │    │    ├─ favicon.ico
       │    │    ├─ layim.png
       │    │    ├─ mapper                                - mybatis mapper文件
       │    │    └─ schema.sql                            - 初始化表结构
       │    ├─ scala
       │    │    └─ io.github.dreamylost                  - 代码实现   
       │    │    └─ io.github.dreamylost.websocket        - websocket代码实现
       │    └─ webapp
       │           ├─ WEB-INF                             - 聊天记录和背景页
       │           ├─ index.html                          - 首页  
       │           └─ static                              - 静态资源文件
       └─ test

本地调试

配置Mysql数据库,Redis以及邮件服务器,如果不需要邮件相关服务,可以在UserService.scala中注释掉相关的代码

  1. 创建MySQL库 websocket
  2. schema.sqldata.sql文件从resources/sql/目录移动到resources/,初始化表结构和数据,如需要自己mock数据,参考 RandomData.scala 构造
  3. 查看application.confapplication.properties配置
  4. 启动 Application.scala
  5. 访问 http://localhost:8080
  6. 登录

选取t_user表中的任意一条数据,如:

  • 邮箱 [email protected]
  • 密码 123456(所有mock数据都是一个密码)
  • 激活 将status状态改为nonactivated(需要激活才能登录,要配置JavaMail)

注意:

  1. 使用环境参数spring.profiles.active=dev,拷贝一份配置命名为application-dev.properties,修改数据库信息
  2. 修改model类后需要清理build目录的class文件
  3. 数据库每次启动自动格式化,不需要格式化就删掉resources下的schema.sqldata.sql

觉得OK点个赞即可,有问题可以创建issue。

部署

# 在Sim目录执行
bash deploy.sh 1.3.0 # 1.3.0表示最新版本号

TODO zim将完成下面工作

  • 使用scalikejdbc替代mybatis
  • 使用纯HTML替代余下的jsp
  • 使用akka-http替代springmvc
  • 使用zio替代springboot
  • 使用zio-ftp存储图片和文件,移除scala.util.Using
  • 使用circe替代Jackson
  • 使用zio-crypto替代spring-security
  • 使用zio-redis替代jedis
  • 使用sbt替代gradle
  • 考虑使用zio-loggingzio-actors
  • 达成目标:完全基于ZIO生态的安全、异步、函数式风格的Scala IM系统。(仅用于学习)