本文作者:程序员鱼皮
大家好,我是鱼皮,今天想和大家分享一位读者提问:
鱼皮,我有一个朋友,想做个 windows 的在线聊天软件,要求能直播、在线不间断语音和打字。我第一反应是 这不是个大学生都能做吗 ?但我却不是特别了解现在的 商业作品 怎么做,所以想问一下。
其实小伙伴的这个问题还是挺不错的,说得专业一点:需要一套商用聊天软件的技术实现方案。
但提问中有一句话让我印象深刻:“是个大学生都能做?”
有点迷惑。。。
我猜测绝大多数学生是没有能力独立完成这个商业作品的。哦不,别说大学生了,工作之后,有多少人能一个人搞完这个商业作品呢?
首先大家要清楚:能做项目和能上线商用是 两码事 !想做成这样一个软件,没有技术、经验和资源的积累,是很困难的。
下面我会分别从 “完成项目” 和 “上线商用” 2 个层次来回答这个问题。
先说基础开发语言:
- Windows 桌面端,推荐 C++、C# 等语言
- 后端服务:Java、Python、Go 都可以
然后是业务实现:
- 即时通讯:你得有 socket 网络编程方面的知识,熟悉双工通信。Java 开发者可以使用 Netty、Vertx 等网络编程框架,对接前端的话可能还要学习 Web Socket 等协议
- 语音通讯:自己实现的话得先学习 WebRTC 等实时传输协议,开发音频收发模块,很麻烦。所以一般情况下用云厂商提供的第三方 WebRTC 服务,对照着文档就能完成开发,但是价格非常昂贵。
OK,我相信有很多同学是学过上述技术的,网上也有很多相关的教程,其实跟着教程敲,基本就能完成开发了。
但如果你想上线商用,难度就会 指数级上升 了!
我随便说几个要考虑的点(当然这也都是我自己的线上项目经历过的):
有可能你在本地跑的项目就你一个人用,没有任何问题。但是一旦发到线上,多个用户一起使用,就可能会出现系统逻辑冲突、系统资源不足、系统使用卡顿等问题。
而如果你想抗住并发,就要把项目从单体改为分布式,要多考虑很多细节。
举个最简单的例子,你的后端每天 0 点要跑定时任务来创建一批数据。在本地的时候只有一个服务器,定时任务每天只会执行一次;而如果你线上有多个服务器,可能每个服务器每天都会执行该任务,导致重复执行。这个时候就要考虑是否添加分布式锁、或者其他机制来控制的幂等性。
说直接点,只要你的项目要上线,就可能会被攻击;而如果你的项目赚钱了,就一定会被攻击!
所以要充分考虑到项目的安全保护,比如常见的用户提交校验、XSS、SQL 注入、限流等等。
但是,有些网络攻击,不是你做好上面你这些,就能防得住的!
比如 DDOS、CC 这种,一般情况下你只能用高防、Web 防火墙来抵抗。
就拿我们 鱼聪明 AI 来说,还没外宣的时候,平均每天就会遭受 10 余次攻击:
但是高防的价格是极其昂贵的,像我们这种刚创业的小公司,都还没靠项目赚钱,哪里用得起几万、几十万的高防???
咳咳扯远了,总之,想上线商用项目的话,一定要把安防这一块纳入考虑。
这是最最最重要的,本地做项目、跑项目,用的资源基本上都是你的个人电脑。而如果你想上线商用项目,到处都要花钱!
就拿我们刚上线的 鱼聪明 AI 给大家举个例子:
- 域名:访问网站必需品
- 服务器:国内外都有,若干台组集群
- MySQL:存基本数据
- Redis:用于登录态、限流、缓存、分布式锁等
- 云硬盘:存日志
- 对象存储:存图片、存资源
- CDN:给图片加速,也是老贵了
- 内容审核:按次数收费,也是非常贵的,但不得不做
- 高防、防火墙:不想说了
- 依赖服务:像 AI 对话、AI 绘画,都是巨量的消耗。尤其是 Midjourney AI 绘画的价格,懂得都懂,我特喵一个年费的 Pro 号一天出头就被大家薅完了 😭
哦对了,还有人力成本,这个是最贵的。
所以在成本有限的情况下,想上线商用项目,谈何容易呀!而且你要做实时语音交流,流量费也是很大的一笔花销。
还有很多其他的点,比如大量的数据存储、用户协议和隐私保护、网络带宽的分配和调控等等,这些等你的项目有一定规模后,都要考虑到。
虽然上线商用项目很难,但我们一步步来呗,我自己也是在摸索阶段呢。
希望大家如果有好的想法,一定不要放弃去实现它!无论做什么项目,都可以先把最基本的功能实现了、给自己和身边的小伙伴用起来,再积累一些资源去做推广,或者有能力的话拉拉投资。
最后让我们的鱼聪明送大家一碗鸡汤:
也欢迎大家使用体验我们自己的小作品: