star-zone

Introduction: ⭐星座空间 App(社交类 App)项目源码,包括 Java 后台、Android、管理后台的代码。自主研发了数据库分表、SSO、token 权限认证
More: Author   ReportBugs   OfficialWebsite   
Tags:

Android 客户端https://github.com/liushaoming/star-zone-android

目前社交类应用有 App,小程序,网站,微信公众号等,其中最普遍有效的客户端还是 App。 本人利用空余时间开发了一款 Android 版 App--星座空间(英文名 star-zone)
如果该项目对您有帮忙,您可以右上角'star'支持一下,谢谢!
源码在开源到了 github 上https://github.com/liushaoming/star-zone Android 客户端https://github.com/liushaoming/star-zone-android

星座空间图标

🚀点我--下载 Android 客户端
大家可以下载后用下用用看。

代码分析

技术选型

下面列举技术栈,并说明选择的原因: 软件分为以下几块:(全部都是我一个人开发的,很辛苦的^_^,全栈工程师+架构师) 1.Android 采用原生 Android 开发

很多人以为用 React Native 开发 App 就不需要处理兼容性问题。其实使用 React Native 开发,也会遇到类似于原生开发里的 gradle jar 包依赖的冲突的问题。 而且,比如需要用到一些第三方厂商的硬件驱动程序 jni 等,或者原生 android 的库。 这种情况下 React Native 来调用这些库,就异常艰难。以国际大厂 Airbnb 为例,该公司曾是比较早采用 React Native 来在生产环境开发 App 的公司,极力推进 React Native。结果后来还是放弃了。 Airbnb 在 Medium 上发博文宣布,“由于许多技术上和组织上的问题,我们决定放弃 React Native,将所有精力投入到原生应用上。” 另外一个原因:我是一个 Java 架构师,对 Java 语言比较熟悉,也会 Android 开发,于是就采用了原生开发

2.后台服务 基于 Java,Spring Boot, Spring Cloud 数据库 MySQL 缓存 Redis

3.后台管理网站(纯静态网站) 做了前后端分离,动态和静态分离,静态网站放在 nginx 上,可以应对高并发访问 前端使用 ES6 语法, 框架采用 vue.js, 插件使用 babel, 样式使用 element-ui

4.App 的推广官网(纯静态网站) 做了前后端分离,动态和静态分离,静态网站放在 nginx 上,可以应对高并发访问

总体架构

  1. 后台总体架构 Android 通过网络,到达服务器后,经过 nginx 反向代理到后台服务。 调用后台接口的时候, 一部分接口是进行了权限验证的,权限验证使用 userId+token 参考我的另外一个框架fpassport
    点击后可以访问 github
    其中使用了 Redis 存放 userId 和 token 的对应关系。提高了系统的响应速度。 由于 app 里后面会加上电商功能,对于下单功能。订单数量是商品数量的很多倍。 采用了分表的架构。分表原理采用一致性 Hash。

  2. 微服务采用了 Spring Cloud Spring Cloud 是采用 HTTP 协议, Dubbo 采用 RPC 方案,采用 TCP 协议通信。 性能方面 Spring Cloud 略差一点。 但是影响不大。两种框架各有利弊。我采用了自己熟悉的 Spring Cloud

  3. 数据库分表操作 基于一致性 hash,见 github 源码

  4. 前后端分离,动静分离 Java 动态网站比较吃内存,操作系统允许的线程数也是一定的。 最多几千个线程。 而且一个线程一般就要占用 512KB 的内存。 光这些 HTTP 连接就至少占用 1G 内存。 还有其他的 CPU 计算,也要占用 1G 以上的内存。

动静分离后。 页面的每次请求不需要经过后端渲染,减少了 Java Http 连接数,减小了内存开销。 nginx 部署静态网站后。不做优化,nginx 本身就能承受上万个并发连接,很适合做静态资源的服务。

  1. 推送服务,即时通讯 使用了小米的推送服务,我自己也自主研发了一个推送服务基于 netty,项目地址 ttps://github.com/liushaoming/fpush

5.前端方案 vue,双向数据绑定,提高编程效率。 element-ui 界面简洁,使用简单,适合后台管理系统开发,跟 vue 结合有天然的便利。 有饿了么公司强大后盾。 使用 es6 或者 js 都行。

上班比较忙。暂时写这么多。 本文后面还会继续编辑更新。把更多内容分享给大家。

项目地址是星座空间 App

源码在开源到了 github 上https://github.com/liushaoming/star-zone Android 客户端https://github.com/liushaoming/star-zone-android
如果该项目对您有帮忙,您可以右上角'star'支持一下,谢谢!

小米推送的 jar 包 为什么 maven 编译的时候会找不到?

比如下面两个 jar MiPush-Server.jar, MiPush-json-simple.jar 依赖会找不到

<dependency>
    <groupId>com.xiaomi</groupId>
    <artifactId>MiPush-Server</artifactId>
    <version>2.2.19</version>
</dependency>
<dependency>
    <groupId>com.xiaomi</groupId>
    <artifactId>MiPush-json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

解决办法:

这个是需要本地 jar instal 到本地 maven 仓库的。具体操作如下

添加本地 jar 到 maven springboot 项目中

maven 项目中,如果想引用第三方提供的,或者自己的本地 jar 包。  是非常困难的事情。

因为这些 jar 没有 groupId, artifactId, maven 命令打包无法引用。
解决思路:
用 mvn install:install-file 命令把本地的 jar 安装到 local maven repository。 然后就可以在 pom 里像普通的 maven 引用来引用这个 jar 了
实例如下:

step1 首先把本地的 jar 都放到项目根路径下新建的 lib 中去

step2,命令行进入 lib 路径

mvn install:install-file -DgroupId=com.xiaomi -DartifactId=MiPush-Server -Dversion=2.2.19 -Dpackaging=jar -Dfile=MiPush-Server-2.2.19.jar

mvn install:install-file -DgroupId=com.xiaomi -DartifactId=MiPush-json-simple -Dversion=1.1.1 -Dpackaging=jar -Dfile=MiPush-json-simple-1.1.1.jar


这这两个 jar 包都 install 到 local repository 了。 
然后,在自己的 springboot 项目里。 就可以直接添加 dependency 就可以了 

<dependency>
    <groupId>com.xiaomi</groupId>
    <artifactId>MiPush-Server</artifactId>
    <version>2.2.19</version>
</dependency>
<dependency>
    <groupId>com.xiaomi</groupId>
    <artifactId>MiPush-json-simple</artifactId>
    <version>1.1.1</version>
</dependency>


groupId 和 artifactId 和 version 都是我自己创建制定的。 并非官方给的

注意这里 MiPush 的 jar 包官方在不断升级。version 自己可以改成最新的,比如 2.2.21 在本项目里的 MiPush_SDK_Server.jar 路径为 MiPush_SDK_Server_2_2_21.jar

json-simple-1.1.1.jar

百度云短信 qcloudsms_java

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools