核心思想:
业务服务器:处理用户资料、动态、匹配逻辑、支付等核心业务。
即时通讯服务:专用于处理高并发、实时的消息传递。
音视频服务:专用于提供稳定、低延迟的音视频通话能力。
技术选型推荐 (兼顾效率与性能)
- 客户端 (UniApp)
框架:UniApp (Vue.js 语法)
UI 库:uView UI / uni-ui (提供丰富的社交组件)
状态管理:Vuex (管理全局用户状态、会话列表等)
本地存储:uni.setStorage (存储Token、用户信息、本地聊天记录)
地图与定位:腾讯地图 / 高德地图 UniApp SDK
推送:UniPush (基于个推,统一管理双端离线推送)
- 实时音视频通话 (以声网 Agora 为例)
a. 信令与通话流程
这是最关键的部分,需要将 IM 和 RTC 服务串联起来。
发起呼叫:
主叫方在聊天界面点击“视频通话”。
生成一个唯一的 channelName(频道名)和 callType(通话类型)。
通过 IM 系统发送一个“信令消息”给被叫方,内容包含 action: 'startCall', channelName, callType 等。
接收呼叫:
被叫方通过 IM 的 onMessageReceived 收到这个信令消息。
触发本地响铃,并显示接听界面。
同时,IM 的离线推送确保用户即使不在线也能收到呼叫通知。
建立连接:
被叫方接听:双方都使用声网 SDK,加入同一个 channelName。
主叫方取消/被叫方拒绝:发送一个 action: 'endCall' 的信令消息,对方更新 UI。
结束通话:任一方挂断,离开声网频道,并发送 action: 'endCall' 信令。
