前端项目如何集成IM?

因为项目中要用到即时通讯(IM ,以下均称为IM)的功能,大概类似下图的客服功能:

客服可以给客户发送文字、图片、以及视频。项目中已经有类似的功能,但使用的技术是websocket,本想继续用它,但是领导考虑到之前用websocket时的各种问题。便让笔者调研一下其他相关的技术,并且特别说明了要看一下RocketChat野火IM。本文总结了如何在已有的项目中集成IM,欢迎阅读学习,如有理解有误的地方请不吝赐教。

建议先阅读一下文章:即时通讯时怎么做到的。了解一下相关的解决方案,然后我们再来看RocketChat野火IM。

1.RocketChat

1.1 简介

开源的聊天应用RocketChat,能够实现群组聊天,直接通信,私聊群,桌面通知,媒体嵌入,链接预览,文件上传,语音/视频 聊天,截图等等,还支持实时翻译,实现用户之间的自动实时消息转换,使用RocketChat可以完全控制交流通信(言外之意想要摆脱微信、QQ等第三方应用,更加注重自己的隐私,或更好的存储自己的文件)。

读了一下RocketChat的官网文档和相关文章,笔者的理解是:以web端为例,可以对RockectChat进行私有化部署和二次开发,从而可以做一个拥有类似微信功能的网页应用。关于部署,可以参考掘金上的文章 部署企业内部聊天工具Rocket.Chat开源IM系统

1.2 如何与已有项目集成

笔者的需求是希望在已有的项目中集成实时通讯,那么Rocket是否支持呢?查了一下,文章将RocketChat与网站集成介绍了可以使用RocketChat的livechat功能,将RockectChat的功能集成到自己的网站中。可以查看开发者文档,这里详细地介绍了livechat-widget的安装过程。

如上图所示,其实就是要在index.html中增加一段script。

2.野火IM

2.1 简介

野火IM官网对其介绍如下:野火IM是一套开源通用的即时通讯和音视频组件,能够更加容易地赋予客户IM能力,使客户可以快速的在自有产品上添加聊天功能。使用野火可以替代云通讯产品或减少自研IM的工作量。降低客户使用IM和音视频通话的成本和难度。

2.2 如何与已有项目集成

快速浏览了一下野火IM的文档,clone了vue-chat项目,本地运行了一下。

注意:首次登陆的时候需要下载相应的手机APP,然后注册一下,再扫码登陆,如下图所示:

笔者扫码登录后,进入了聊天的页面,使用vue-devtool定位到发消息的组件,从而可以进一步了解发送消息的相关代码,如下图所示:

在MessageInputView.vue组件中发送消息的代码如下图所示:

wfc的引用路径为:import wfc from "@/wfc/client/wfc";看一下这个文件,代码量真不少,搜索一下组件中调用的方法:

如上图所示这个方法又是对impl的相关方法的调用。聚焦到这个impl:

打开这个文件一看,傻眼了:

这是压缩之后的文件啊!可见核心的部分是没有开源的,再仔细看文档中的说明也是明白了:

上图说明了Web SDK是收费项目,但是Demo( 也就是vue-chat是开源的)。

上图说明了购买Web SDK 之后要替换掉压缩的proto.min.js 。

另外我们再看小程序的demo项目:

核心代码proto.min.js也是压缩的,因为小程序SDK也是收费的。

由于uni-app的不收费,因此考虑一下可不可以参考uni-app的代码来自己实现web端的sdk呢?因此看了一下uni-app的demo里面的proto.min.js的代码:

通过上面的代码截图,我们知道关键处在于 uniWfcClient.sendMessage 而这里的uniWfcClient是如何引入的呢?见下图:

通过上图可见,这是通过引入原生插件来实现的。

通过上图可知原生插件是Android以及IOS相关代码,要想研究一下还要有相关语言基础,太难了!果断放弃了投机取巧参考uni-app实现Web SDK的想法。要想用人家的Web SDK 还是要购买的!

另外笔者就一些问题也发邮件咨询了一下野火IM的技术客服,下图为客服对笔者的回复:

3.总结

要在项目中集成IM有很多的解决方案,比如websocket、http轮询、消息队列等,但是如果有封装好的解决方案则会让我们的开发事半功倍,本文所介绍的RocketChat和野火IM可以供大家参考。

猜你喜欢

转载自juejin.im/post/7158270853535236110
IM