服务端

快速跑通服务端项目源码nemo

更新时间: 2023/08/02 08:15:44

网易云信提供开源的 1 对 1 娱乐社交服务端源码。本文介绍如何基于 1 对 1 娱乐社交服务端 nemo 的项目源码,快速启动 1 对 1 娱乐社交服务端。您可以参考该源码搭建您自己的 1 对 1 娱乐社交服务端。

功能介绍

nemo 是网易云信派对 - 1 对 1 娱乐社交的服务端开源工程,提供的主要功能如下表所示。

功能
描述
登录 应用服务器负责向云信服务端申请账号对应的Token,并维护账号与 Token 的对应关系。当用户登录时,SDK 向云信服务端进行 Token 鉴权。
用户个人中心管理 应用服务器需要管理用户的个人信息,包括用户名、密码、昵称、头像等。
用户在线状态管理 应用服务器需要维护最新的用户在线列表,以便客户端了解当前哪些用户处于在线状态,并进行相关业务处理。包括用户状态上报、在线列表查询、在线状态查询。
安全通 1 对 1 娱乐社交安全通包括音视频通话内容安全审核和 IM 消息的内容安全审核。
  • 音视频通话安全通:应用服务器调用云信RTC服务端的创建安全通审核任务,接收实时内容审核违规结果,并据此进行相关的业务处理逻辑,例如视频遮盖、踢人、关闭房间等等。
  • IM 安全通:对于语音、视频消息进行安全通反垃圾时,是异步检测的,并且检测结果是通过 IM 抄送通知开发者服务器。虽然命中后云信会自动删除服务器上的文件,但是在检测结果出来之前,消息可能已经被投递到接收方。因此如果开发者收到命中抄送后,请通过 IM 服务端接口进行消息撤回
礼物 应用服务器需要实现接收和处理用户发送的礼物请求,验证用户身份和礼物数量,更新用户礼物余额和发送礼物到接收者。此外,服务端还需要处理礼物展示的逻辑和动画效果,以保证礼物的展示效果和流畅度。

前提条件

背景信息

网易云信派对服务端 Nemo 已发布 Docker 镜像至镜像仓库,镜像名称如下表所示。

请根据您的操作系统,在 docker-compose.yml 文件中填写对应的 Nemo 镜像名称。

Nemo 镜像 操作系统
yunxindev/nemo-api:1.0 X86-64平台
yunxindev/nemo-api:1.0-m1 Mac M1系统

环境准备

本地跑通语聊房服务端 Nemo 的示例源码项目,需要准备如下环境:

  1. 下载并安装 Docker

    在终端窗口执行如下命令安装 Docker,详细的安装步骤请参见 Install Docker Desktop

    brew install --cask --appdir=/Applications docker
    

    Docker 安装成功的结果类似如下图所示。

    Docker安装结果.png

  2. (可选)安装 docker-compose,用于管理 Docker容器。

    在 Mac 和 Windows 操作系统上安装 Docker Desktop 时,默认自带了 Docker Compose。其他操作系统可以从 Docker 官网 下载并安装。

快速启动 Nemo项目

语聊房服务端 Nemo 的示例源码仅供开发者接入参考,实际应用开发场景中,请结合具体业务需求修改使用。

若您计划将源码用于生产环境,请确保应用正式上线前已经过全面测试,以免因兼容性等问题造成损失。

  1. 下载云信娱乐社交服务端 Nemo 的项目源码至本地。

  2. 修改启动容器的配置文件。

    1. 修改docker-compose.yml 文件中的 appKeyappSecret,请在云信控制台查看您的 AppKey、AppSecret,具体请参见 已创建应用并获取 App Key
    version: '3'
    services:
    nemoService:
        container_name: nemo
        image: yunxindev/nemo-api:1.0 #请根据操作系统填写对应的Nemo镜像,此处以Ubuntu系统对应的Nemo镜像为例
        environment:
        APPKEY: ${APPKEY} # 添加云信appkey
        APPSECRET: ${APPSECRET} # 添加云信AppSecret
    
    1. 如果是Mac 设备 M1 芯片,需要在 docker-compose.yml 文件中修改 image: mysql:5.7image: mysql/mysql-server:latest
  3. 启动 docker-compose.yml 中定义的 Docker 容器。

    sudo docker-compose up -d
    

    启动 Docker 容器时,Docker 会自动拉取在 docker-compose.yml 文件中指定的 Nemo 镜像。

    启动Docker结果.png

  4. 查看 Docker 进程及日志。

    sudo docker  ps
    
  5. 查看 nemoService 日志。

    sudo docker-compose logs nemoService
    

    查看nemoService日志.png

  6. 初始化应用及测试账号。

    在终端窗口执行如下命令。

    bashcurl --location --request POST 'http://127.0.0.1:9981/nemo/socialChat/server/user/initOneToOne' --data-raw '';
    

    返回结果code 200 表示服务在本地启动成功。

    nemo服务启动结果.png

    请保存 userUuid 和 imToken 的值,客户端跑通 Demo 时需要填写该值。

后续处理

如果需要联调客户端代码,则需要将 nemo 工程发布为外网可以访问的服务,并在云信控制台配置抄送地址。

请在云信控制台配置 NERoom 服务消息抄送地址, 1 对 1 娱乐社交消息抄送的地址为 http://{nemo服务域名}/nemo/socialChat/nim/notify。配置消息抄送的步骤请参见开通消息抄送

示例项目结构

1 对 1 娱乐社交服务端 nemo 项目核心目录结构如下:

nemo 项目核心目录结构
├── Dockerfile                                                       # Dockerfile
├── docker-compose.yml                                                # docker-compose本地环境编排文件
├── nemo-common                                                       # nemo 公共模块,封装云信 openAPI 服务及公共方法
│   ├── pom.xml
│   └── src
│       └── main
│           ├── java
│           │   └── com
│           │       └── netease
│           │           └── nemo
│           │               ├── annotation
│           │               │   ├── Checksum.java
│           │               │   ├── RestResponseBody.java
│           │               │   └── TokenAuth.java
│           │               ├── code
│           │               │   └── ErrorCode.java
│           │               ├── config                                  #nemo配置类
│           │               │   ├── NemoConfig.java
│           │               │   ├── RestResponseBodyConfiguration.java
│           │               │   ├── YunXinConfig.java
│           │               │   └── YunXinConfigProperties.java
│           │               ├── openApi
│           │               │   ├── NimService.java                     # 封装云信部分服务器API
│           │               │   ├── YunXinServer.java                   # http请求server
│           │               │   ├── dto                                 
│           │               │   │   ├── antispam                        # 安全通对象DTO
│           │               │   │   │   ├── AntispamLabel.java
│           │               │   │   │   ├── RtcAntispam.java
│           │               │   │   │   └── RtcAntispamDto.java
│           │               │   │   ├── nim                             
│           │               │   │   └── response
│           │               │   ├── enums
│           │               │   └── paramters
│           │               │       ├── AutoMaskConfig.java
│           │               │       ├── StopLiveWallSolutionTaskParam.java
│           │               │       └── SubmitLiveWallSolutionTaskParam.java
│           │               ├── service
│           │               │   └── NimNotifyService.java               # 抄送接口
│           │               └── util                                    # 公共类
│           └── resources                                               # 错误码配置文件
│               ├── ValidationMessages.properties
│               ├── ValidationMessages_en_US.properties
│               ├── ValidationMessages_zh_CN.properties
│               └── restMessage                                         
│                   ├── messages.properties
│                   ├── messages_en_US.properties
│                   └── messages_zh_CN.properties
├── nemo-controller                                            # 网易云信派对 11 娱乐社交API模块
│   ├── pom.xml
│   └── src
│       └── main    
│           ├── java
│           │   └── com
│           │       └── netease
│           │           └── nemo
│           │               ├── RestApplication.java                    # 应用启动leiu
│           │               ├── controller
│           │               │   └── socialChat
│           │               │       ├── NotifyController.java           # 1v1抄送API
│           │               │       ├── OneToOneChatController.java     # 1v1抄送API 接受RTC抄送
│           │               │       ├── UserController.java             # 1v1登录API
│           │               │       └── UserServerController.java       # 1v1服务器——创建账号、更新账户等
│           │               └── interceptor
│           │                   ├── AuthInterceptor.java
│           │                   └── MVCConfig.java
│           └── resources
│               ├── README.md
│               ├── application-local.yml
│               ├── application.yml
│               └── logback-spring.xml
├── nemo-socialchat-service                                         # 网易云信派对 11 娱乐社交核心module
│   ├── pom.xml
│   └── src
│       └── main
│           └── java
│               └── com
│                   └── netease
│                       └── nemo
│                           └── socialchat
│                               ├── bo
│                               ├── constants
│                               ├── dto
│                               ├── enums
│                               ├── parameter
│                               │   └── rtcNotify
│                               ├── service                      # 1v1服务实现
│                               │   ├── OneToOneChatService.java
│                               │   ├── SecurityAuditService.java
│                               │   ├── SocialChatMessageService.java
│                               │   ├── impl
│                               │   │   ├── OneToOneChatServiceImpl.java       # 1v1业务核心实现类
│                               │   │   ├── SecurityAuditServiceImpl.java      # 安全通审核服务相关实现
│                               │   │   └── SocialChatNotifyServiceImpl.java   # 1v1抄送接口实现
│                               │   └── scheduler
│                               │       └── SocialChatScheduler.java        # 1v1定时任务

├── nemo-user-service                                               # 用户模块
│   ├── pom.xml
│   └── src
│       └── main
│           ├── java
│           │   └── com
│           │       └── netease
│           │           └── nemo
│           │               ├── dto
│           │               │   └── UserDto.java                    # 用户对象实体
│           │               ├── enums
│           │               │   └── UserStateEnum.java
│           │               ├── mapper                              # 用户模板 maybatis dao文件
│           │               │   ├── GiftMapper.java
│           │               │   ├── UserDeviceMapper.java
│           │               │   ├── UserMapper.java
│           │               │   └── UserRewardMapper.java
│           │               ├── model
│           │               │   └── po                              # maybatis model文件
│           │               │       ├── Gift.java
│           │               │       ├── User.java
│           │               │       ├── UserDevice.java
│           │               │       └── UserReward.java
│           │               ├── parameter                           # 用户模块API接口入参
│           │               │   ├── CreateUserParam.java
│           │               │   ├── LoginParam.java
│           │               │   └── UpdateUserParam.java
│           │               └── service
│           │                   ├── UserService.java                # 用户接口
│           │                   └── impl
│           │                       └── UserServiceImpl.java
│           └── resources
│               └── mapper                                         # mybatis mapper文件
│                   ├── GiftMapper.xml
│                   ├── UserDeviceMapper.xml
│                   ├── UserMapper.xml
│                   └── UserRewardMapper.xml
├── pom.xml
├── table
│   └── init.sql                                                   # 初始化脚本

常见问题

此文档是否对你有帮助?
有帮助
去反馈
  • 功能介绍
  • 前提条件
  • 背景信息
  • 环境准备
  • 快速启动 Nemo项目
  • 后续处理
  • 示例项目结构
  • 常见问题