IM (一)| 野火IM的服务部署

背景调研

业务需求:涉及IM和音视频;

方案有哪些:

1.主流的第三方SDK

声网、腾讯音视频、阿里、网易、七牛等等…

优点:技术方案成熟 接口规范统一 通道稳定 技术支持快 安全 支持跨端的集成 直接集成UI二次开发…

缺点:太贵,对于一些有预算和个人产品不友好

普通要求的方案

对于涉及IM为核心运营业务的公司来说都会选择这些大厂的SDK。

对于只要求功能,对预算成本严格,开发成本低,还要快,不要求性能的话有哪些办法?

方案:通过webRtc点对点的通信方式,需要部署信令服务和Turn服务。

方案存在的问题:如果是使用在原生项目中可以集成,但是在跨端方案中缺少插件和完整的通道服务,开发起来十分的困难,工作量大,开发成本高,不适合外包项目。

探索

想寻找一种折中的方案,支持平台丰富,又开源免费的方案。

如果采用uniapp的跨端方案,要解决原生插件的问题,要同时开发Android和IOS端的原生插件,这个工作量非常大,且得同时熟悉双端的原生开发。

那有没有免费的插件?

打开插件市场是这样的:

居然还有人买了

还是太贵,只想白嫖。继续搜免费的

但是看下来要么就是评论区很多问题,或者不支持跨端的直接集成,也没有开源的Demo。

继续搜索,发现了两个比较靠谱的看上去

野火

OpenIM

支持的平台很丰富,而且还是用go开发的

使用

从文档上看两者的功能都差不多,OpenIM看上去更专业高大上一点,支持docker部署还是用go写的,开发成本较大,两者都支持uniapp的插件,野火有UTS插件,这倒是难得,还支持鸿蒙,从长远角度考虑这是一个很大的优势,毕竟鸿蒙5.0以上就不再支持APK编译了。但从UI和文档规范上看后者更胜一筹。

野火

野火存在普通版和专业付费版,具体文档上已经说明,扫码下载的是专业版,开源的DEMO是普通版本,两者可以互相发送消息但是无法进行音视频通话。

运行官方提供的uniappDemo,需要自定义基座,运行的界面如下,并且在两端可以进行视频通话。

初步使用并没有特别的卡顿。

部署服务

需要部署三个服务,IM服务、应用服务、Turn服务,IM服务用于消息的转发,应用服务用于登录等功能,Turn用于P2P的内网穿透。

1.IM服务

tar -xzvf distribution-1.3.2-bundle-tar.tar.gz

tar -xzvf app-server-release-latest.tar.gz

进入bin目录执行

sh ./wildfirechat.sh

nohup java -jar app-0.xx.jar 2>&1 &

http://${服务器的IP}:8888/

默认使用的是h2的数据库,要切换到mysql,修改config中的文件,配置Mysql的连接和登录信息,修改数据库类型。

修改完重新运行会自动建表wfchat

到此IM服务部署完成了。

2.应用服务部署

运行nohup java -jar app-0.68.jar 2>&1 &

java -jar app-0.68.jar

开放8888端口

应用服务器返回OK说明部署正确,实际还需要修改登录时的验证码配置;

数据库要手动创建,官方默认的是appdata,运行项目后会自动建表。

登录成功后一直显示正在连接…,不知道什么原因

adb logcat | grep mars 产看手机端日志

发现是连接的问题,要修改IM中config的配置,这里要填写服务器的公网IP

到此两个服务部署成功了,客户端运行界面正常。

推送的问题

上面的两个服务部署完成后就可以正常使用,但缺失一个重要的功能就是推送。

先放一张uniapp文档中的推送流程图

对于APP在线的状态下,推送不需要走厂商的通道,所以在uniapp集成push后在后台发送,如果APP在前台的话是可以收到通知的,离线的情况下还是需要走厂商的通道。

走厂商的通道过于麻烦,要分别去申请而且还有限制,比如oppo,还得先上架这简直离谱,上架优先于功能开发太恶心的事,虽然提供了不上架申请的渠道也很麻烦。

### OpenIM 集成方法和对接教程 #### 、集成前准备 为了顺利地将 OpenIM 集成到现有的系统或平台中,需先完成些准备工作。确保已注册并获取了 OpenIM 的 API Key 和 Secret Key,这些密钥用于身份验证和授权[^4]。 #### 二、环境配置 对于不同类型的项目(如 Web、移动端),需要按照官方文档指导安装对应的 SDK 版本。例如,在 UniApp 中可以通过 npm 或 yarn 来安装 `open-im-sdk-uniapp` 插件: ```bash npm install open-im-sdk-uniapp --save ``` 或者 ```bash yarn add open-im-sdk-uniapp ``` 接着,在项目的入口文件里引入该模块,并初始化 SDK 实例[^3]。 #### 三、核心功能实现 ##### 用户登录登出 通过调用相应的接口来处理用户的登录状态管理。通常情况下会涉及到 token 获取、刷新以及注销等功能。以下是简单的 JavaScript 示例代码展示如何执行登录操作: ```javascript import OpenIM from 'open-im-sdk-uniapp'; // 初始化SDK实例 const im = new OpenIM({ sdkappid: YOUR_SDK_APPID, accountType: ACCOUNT_TYPE, // 账号类型 }); async function login() { try { await im.login({ userID: USER_ID, token: TOKEN }); console.log('Login successfully'); } catch (error) { console.error('Failed to log in:', error); } } ``` ##### 发送消息 发送不同类型的消息给其他用户也是重要的部分之。下面是个发送文本消息的例子: ```javascript function sendMessage(toUserID, content) { const message = { conversationID: `${toUserID}`, // 对方的userID作为对话ID senderPlatformID: PLATFORM_ID, // 平台编号 msgFrom: MSG_FROM, // 消息来源标识符 contentType: CONTENT_TYPE_TEXT,// 文字内容类型 content: JSON.stringify({ text: content }), // 将实际的内容转换为JSON字符串形式 seq: SEQ_NUMBER // 序列号 }; im.sendMsg(message).then(() => { console.log(`Message sent to ${toUserID}`); }).catch((err) => { console.warn(err); }); } ``` 以上仅展示了最基础的操作流程,具体的应用场景可能还需要考虑更多的细节问题,比如错误重试机制、网络连接异常等情况下的应对措施等[^1]。 #### 四、测试优化 完成初步集成之后,应该进行全面的功能测试,确保各个模块都能正常工作。同时也要关注性能表现,必要时可以对代码逻辑做出调整以提高效率[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值