Gitee地址

https://gitee.com/hxl495/applets-example/tree/master/wechat

项目截图

在这里插入图片描述
在这里插入图片描述

运行项目

1.准备好AppID和AppSecret(小程序密钥)。
在这里插入图片描述

  1. 导入并配置小程序
    项目目录下SpringBoot-Server目录不属于小程序部分,属于后端,无需导入。接下来打开app.js,配置服务器IP地址,如果在Tomact下部署,需要增加项目名。
    在这里插入图片描述

  2. 配置后端
    进入SpringBoot-Server\wechat\src\main\resources目录,修改application.properties文件,配置Redis地址、端口,AppId、secret。
    后端由于需要存储用户数据,所以使用了Redis。
    在这里插入图片描述

  3. 启动Redis
    下载Redis后双击Redis-x64-3.2.100/redis-server.exe即可,Linux下执行./redis-server。
    在这里插入图片描述

  4. 打包War
    cmd进入SpringBoot-Server\wechat下,执行mvn package进行打包,前提需要安装上maven,如果没有安装,则需要下载并配置环境变量,安装好记得配置阿里云镜像,不然下载jar时候会非常慢。
    在这里插入图片描述
    将target/wechat-0.0.1-SNAPSHOT.war复制到Tomcat目录下webapps下,并启动Tomcat。

运行原理

主要使用WebSocket来实现,整体通信步骤较简单,步骤如下。

  1. 小程序用户信息授权。
  2. 授权后进行登录,向后端传入临时登录凭证,用来获取OpenId。
  3. 后端根据临时登录凭证获取OpenId,并存储到Redis,之后返回给小程序。
  4. 小程序登录后通过WebSocket连接服务器,传入第三步返回的OpenId。
  5. 后端将他的session存放到ConcurrentHashMap中,并把上线状态置为true。
  6. 判断是否有此用户的离线消息,如果有,则构建成一个数组发送给此用户。
  7. 广播消息,告诉其他用户,我上线了。
  8. 小程序收到广播后,刷新用户列表。
  9. 后端从Redis取出所有的用户,并在目前在线列表中获取对应状态,修改并返回给小程序。

发送消息流程

  1. 判断是否登录、WebSocket是否连接,未连接未登录则进行登录、连接。
  2. 构建消息body,包含fromId和toId,通过webSocket发送到后端。
  3. 后端解析数据,判断toId用户是否在线,不在线则将消息存放到离线消息集合中。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐