话说要是自己实现一套 IM 的功能难度大吗?

2022-05-25 09:48:46 +08:00
 godleon

前言

想自己做一个 IM 的包实现起来难度大吗?

MQTT 协议,java ,netty+socket

问题

特别想问一下,就是这个"语音消息" 不是语音通话,一条条的语音消息,这个是怎么实现的呀?还有像聊天记录的存储格式了,有没有热心 v 友能给一些思路或者一些开源的参考~ 

ps: 语音消息,问了一个大佬,他说发语音消息的时候,先录音成.mp3 文件到本地,然后发送到另一端,另一端接收播放这个.mp3 ,这....

7439 次点击
所在节点    Java
55 条回复
littlewing
2022-05-25 19:13:58 +08:00
功能做出来不难,难的是优化和用户体验,还有承载用户量
stillyu
2022-05-25 21:51:15 +08:00
感觉会这么问的,不像是程序员

IM 可能没做过,但商城每个工作了的程序员都做过吧?

自己做的商城和淘宝比,工作量和难度不都心里有数了吗?

ps:商品详情,问了一个大佬,他说编辑商品详情的时候,先编辑成.doc 文件存在本地,然后在商品详情编辑框粘贴上去,页面显示这个内容,这...
firechat
2022-05-25 23:06:12 +08:00
以我的经验给你几点建议吧
1. 格式用 amr ,amr 的好处是对人声处理的特别好,压缩比特别高,基本上每秒小于 1KB 。
2. 发送语音有 2 个种办法,一种是上传到一个服务器,把链接发送给对方,对方播放再下载;另外一种是直接放到消息体内直接发送给对方。如果是对讲语音,用第二种方式。
3. 对接的话不需要考虑存储,对方不在就直接丢掉。如果只有对讲可以不用考虑离线消息和消息存储。当然如果有其它类型的消息则必须实现了。
4. 不要从 0 开始写,现在有开源的 MQTT 服务和客户端,一个频道就是一个 topic 就行,再加上抢麦的功能,这种网上有很多抢红包的例子,比较类似。
5. 要逐步实现,不要贪大求全,上来就高并发微服务。先功能再优化。

另外感觉你问得太笼统了,如果做好一个通用型的 IM 是非常困难的,你基本上在这里得不到答案。你可以详细说一下问题和需求。
nicevar
2022-05-25 23:35:25 +08:00
有一段时间做 IM 的扎堆,基本上都挂了,从头到尾自己做意义不大,直接上 XMPP 之类的就行了
XiLingHost
2022-05-26 00:14:18 +08:00
建议做一个用户体验好的 xmpp 客户端
mingl0280
2022-05-26 00:52:33 +08:00
大,而且大到坑爹。
你举例的那个操作,要坑死你
1. 网络不好的带宽有限,移动网络的容易不在网,丢包网络的切换的时候丢了几个包,怎么办?实时性做到哪个程度?没听到的能不能回溯?
2. 一个频道要承载多少人?网络协议走可靠的还是不可靠的?服务器要预备多少带宽?有没有 fallback 到 p2p 功能?如果 fallback 怎么打洞?
3. 客户端要多少个平台? Android 底下的设备要适配多少? Apple 的呢?桌面的呢?
4. 你这个系统准备有多少容灾,是不是个人部署,要不要考虑部署的合规性?
还有具体的技术细节一箩筐……
documentzhangx66
2022-05-26 07:04:50 +08:00
1.作业级别的一点都不难,语音视频什么的无脑开源协议,甚至 mp4 、rtmp 等等。

2.如果要自己设计音频视频协议,那就麻烦很多,需要从数学原理开始进行优化,不然未压缩的 raw 音频与视频数据量,尺寸会大到离谱。

3.最麻烦的是给所有人用的量级,这就不是技术问题了。你需要有足够的资金,拿来买带宽、服务器、甚至机房。
cnbattle
2022-05-26 08:12:01 +08:00
不考虑语音视频通话,用户量,

用 mqtt 两三天,去年搞过,

没搞过语音视频场景,跟着上面大佬学习一波
GeruzoniAnsasu
2022-05-26 08:53:20 +08:00
有没有一种可能,不需要把文件写到外存上,录在内存里直接发出去就可以了
bl4ckoooooH4t
2022-05-26 09:17:25 +08:00
市面上挺多 IM 都是把音频录好,上传到云存储,然后发一个 音频类型的消息,里面带了音频文件的 URL 。 融云、云信、腾讯都有 SDK ,可以参考看看
Lambert2022
2022-05-26 09:19:25 +08:00
可以直接集成 firebase 来实现
sparky
2022-05-26 09:34:28 +08:00
WebRTC ?
EvanLuo42
2022-05-26 16:29:50 +08:00
一直挺想写 IM ,最近学了 Rust ,想拿 Rust 试试。
mrjnamei
2022-05-26 17:21:29 +08:00
文件信息肯定是传播放地址啊,把文件上传到云存储,把地址当做语音消息传过去,另一端直接播放这个在线 MP3
superchrisliu
2022-06-01 15:32:59 +08:00
@documentzhangx66 自己设计音视频协议。。光这一项你一年都做不完,就算是生产环境 rtmp 也能用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/855128

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX