由于作者本文是做IM出生,本身对即时通讯技术比较感兴趣,加上身边都是做即时通讯的朋友,于是那天一起吐槽了一下这个功能。对于已经稳定的微信架构,在前端加一些这些功能点,本身就so easy,只是张小龙愿不愿意做而已
这里不得不佩服的是,微信真的目前来说已经很稳了,以前我们公司,自己搭建的国际服务器,会每隔段时间出一次事故,即便国内亿级用户量的架构师都已经参与进来了(在这里深深佩服Telegram的开发者)。即时通讯里面出现一个小问题,就会被无限放大,因为它不像传统的网站,它是客户端,需要下载安装,如果用户使用发现了问题,就会一直不断重现,假如是说这个版本的消息推送一直有问题,那么这个版本,用户就要被这个问题一直无限的重复骚扰。而且可能你不知不觉,他已经卸载了
总之,想提升技术,推荐可以去做即时通讯,那里面一年有你在外面五年都学不到的东西,游戏、社交都算,年终奖也是最高的
正式开始
首先,微信采用原生开发,例如IOS,采用的是object-c编写,那么就叫客户端,每个即时通
讯的客户端,也是一台服务器,所以做即时通讯的客户端开发,本身就相当半个全栈工程师。客户端,就该拥有客户端的能力,那么它就拥有数据库,例如sqlite3,嵌入式的数据库。Node.js也可以使用,例如Electron
据我观察,微信的表情包评论,也是灰度发布,即使你先更新了,但不会立马就能使用,不过你肯定可以看到。
首次更新、登陆,得到这个结果,然后接受到决定能否看到发送表情包推送的tag,存入数据库,这样就每次登陆就会数据库取这个tag决定能否展示发送表情包评论的控制台,相当于我们存入localStorage一样。
之后,管理层需要回收这个功能,于是需要Push一次
服务器根据一定的规则,采用灰度回收,可能是片区轮询式推送,更新tag,让客户端丧失表情评论的选择界面,这样就失去了评论功能,但是还是可以看到之前的评论,因为源码里、数据库的展示、数据存储都还在。
这里很简单就把如何灰度发布、灰度回收,讲清楚了。既然讲了图片,那么就讲讲客户端的表情存储
即时通讯既是一个服务器,也是一个客户端,那么它就是也拥有文件io的能力,调用各种插件的能力。
我们看到的表情包,例如在IOS上是300个上限,你点进去的时候可以发现
我们的gif图表情包,是缩略图,是不会动的,,取的第一帧,这里就要吐槽下Node.js,看似什么都能做,但是很多事情都做得不太好,压缩图片都不是非常完美,即便使用了C++插件,当你重度使用过Node.js,就应该考虑系统学一门真正的后台语言,例如Golang,但是Node.js在某些地方用来做工具是非常棒的。
这些缩略图都是存储在客户端,可能是在某个表的字段里,存储着你我的小秘密的数组集合,然后出来遍历展示一波?
想要在哪里使用这个组件,引入一波就行,例如在评论中引用,点击表情向服务器推送,对应的数据type,表情包的src地址。服务器接受到message后,对当前这条朋友圈的相关人推送消息,更新朋友圈提示即可。
这个思路,就跟用户在微博或者微信点赞一样,默认是成功的,但是如果失败了,那么下次登陆或者刷新时候,会显示没有点赞~不止是前端,后端也需要异步,最近有对微服务架构的进行系统学习,感觉真的是很多东西相通的,只是方式变了而已。底层的处理思维逻辑其实都差不多,但是有一点要注意的是,学一个东西,最忌讳学一半而不精,三心二意,这样很可怕。系统学习一个东西,真的很重要
例如webpack,网上一大堆文章教你怎么配置,怎么代码分割,但是比较少人跟你说webpack的运行机制、热更新原理、loader、plugin原理,babel插件怎么写,怎么定制开发你的webpack-plugin,这些需要时间学习成本的东西才最重要,才最能提升你自己
如果感觉写得不错,对你有一点提升,麻烦你点个在看,顺便关注一下我的公众号:前端巅峰
如果你对即时通讯、跨平台重型应用开发、全栈工程师技术栈感兴趣,那么,回复:加群 即可假如我们交流群~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。