乐趣区

关于后端:55-个小时开发出的-Web-版-Clubhouse-是如何进行技术选型

作者:白宦成

语音社群 Clubhouse 近期在寰球爆红,LeanCloud 用户 Bestony(白宦成)花了 55 个小时就复刻出了 Clubhouse web 版、NES 格调的「NESHouse」,并且将它开源。Bestony 示意 NESHouse 作为一个 Hackthon 我的项目,相比于其余正式运行的我的项目,可能生命周期更短,也不会走入正式经营的阶段,不过,我的项目的技术选型和设计上倒是有一些比拟有意思的点,值得分享给大家。

Hackthon,要的就是快!

这几天陆续分享内容后,一直有一些开发者留言评论:这个我的项目应用的都是他人的服务,你的价值是什么?

NESHouse 作为一个 Hackthon 我的项目,目标是在无限的工夫内,从 0 到 1 将需要实现,在这个过程中,开发者须要去认真评估本人所领有的资源和要达成的指标,让资源和指标匹配,能力很好的实现本人的开发工作,达成本人本次 Hackthon 的指标。

作为一个 go 后端开发者,在这个我的项目中,我应用的是 LeanCloud 提供的云服务,而不是应用 gin 本人写一个 http server,仿佛不合常理,没有应用本人最相熟的技术计划。但,如果将资源和需要联合起来看,就会发现这个抉择是很失常的。Gin 诚然我相熟,但我不相熟的是前端,如果我将一部分工夫安顿在了后端的研发上,必然挤压我在前端开发的工夫。

所以在 NEShouse 我的项目中,我抉择了我比拟相熟,且开发工夫周期最短的 Serverless 云服务 —— LeanClod 来实现我的后端工作量,这样我能够简直不必在后端上破费工夫和精力来实现工作 。而在音频服务上也抉择了应用现成的服务,而不是本人实现一套,起因也统一, 我的预期是在 72 小时内实现这个我的项目的研发,而不是本人打造一套残缺的实时音频系统。所以我必然会抉择更加好用,更加现成的解决方案,来简化我本人的工作。

此外,在这个我的项目中,有一个比拟适宜进行工作量评估的事件,便是我在我的项目中应用到了 LeanCloud 的 LiveQuery 的能力,LiveQuery 提供了实时数据同步的能力,你应用 WebSocket 也能够实现雷同的性能,不过,如何能给又好又快,同时在 WebSocket 服务器上实现各种鉴权和扩大能力,是一个麻烦的事件。你能够用这个非常简单的性能,来评估假如你本人来实现所有的性能所须要消耗的工夫。这样你就能够了解为什么在这个我的项目中,我抉择 LeanCloud 来实现工作。

浏览器兼容,你是真的坑!

在 NESHouse 的开发中,其实并没有破费太多的工夫,倒是两头因为我回老家,花了不少工夫在路上。实际上,在整个我的项目中,最为费神的,是各种浏览器之间的兼容问题。

基于浏览器的 NESHouse 和其余基于零碎原生 API 的音频利用相比,一个很大的问题在于浏览器在解决音频设备上的不同。NESHouse 应用的音频接口是基于浏览器封装后一层的 API,而这个 API 处于思考爱护用户的思考,在某些特定的场景下,会要求你先产生一些操作能力触发音频播放,所以针对不同的浏览器,你须要编写不同的适配代码,这些代码最终就会让你的代码变得又臭又长,大量的冗余代码。

比如说,在微信浏览器中,默认状况下你是无奈听到 WebRTC 传递回的音频的,须要用户在页面上进行点击,能力进行播放。

NESHouse 在实现这部分的逻辑时,采纳的是判断用户如果是微信浏览器,则会显示一个用户受权页面,让用户被动去点击,来实现音频播放的能力。

Alpine.js, 真香

作为一个后端,对于前端的几大框架,也仅仅局限在能够用,能够写出我想要的性能的利用。但在具体的实现的时候,因为一些起因,我没有应用 Vue/React/Angular 之类的利用,再加上心愿在 hackthon 中应用一些新的技术,我便应用了 Alpine.js。

什么是 alpine.js?Alpine.js 是一个在根底的 DOM 上实现了相似 Vue/React 的双向绑定的一个框架,应用 Alpine.js 和 Vue/React 的一个很大的不同点就在于,他能够让你在现有的 HTML 中十分轻松的实现双向绑定,而不须要重写整个代码。

举个例子来说,假如你想要在 Vue/React 中实现双向绑定,你须要将你的代码放在 template 中或者转换为 JSX 来获取相应的双向绑定的能力。但在 Alpine.js 中,你须要做的仅仅是在你须要绑定的中央退出 x-model=xxx 来实现绑定,非常简略。

不仅如此,Alpine 也实现了大部分 Vue/React 之类利用实现的性能,比方 x-forx-onx-if 等罕用的命令,在理论写逻辑的时候,我大量的利用了这些逻辑来实现我本人的工作,非常不便

在 NESHouse 中,随处可见 Alpine.js 的利用

Alpine.js 能够很轻松让一个不相熟 Webpack 等前端构建工具的后端工程师,在本人的利用中实现双向绑定。对于后端工程师来说,这个工具你们不可错过。

总结

NESHouse 的技术栈相比于很多简单的利用来说,非常的简略,仅仅是 Leancloud + RTE 服务就能够实现简直所有性能,但我置信,这样的技术架构选型,对于一些不须要那么大计算量、没有那么高业务负载的我的项目而言,是有帮忙的。就算你有屠龙技,又何需在杀鸡之时用他呢?

点击文字查看开源我的项目

退出移动版