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

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

前言

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

MQTT 协议,java ,netty+socket

问题

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

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

7397 次点击
所在节点    Java
55 条回复
sadfQED2
2022-05-25 09:55:03 +08:00
大学 cs 专业学生,应该绝大多数人都写过 im 聊天软件吧
XiLingHost
2022-05-25 09:55:12 +08:00
你可以把声音用 opus 之类的编码器进行编码,然后传二进制报文过去
murmur
2022-05-25 09:57:17 +08:00
作业级别的语音消息真的可以这么做,以前没有 4g 网的时候要各种考虑压缩,现在的网速发个 mp3 问题也不大
cutepeer
2022-05-25 09:59:54 +08:00
一般都用云服务了啦,接入 sdk ,消息云同步啥的都替你做好,云平台还能加审核过滤功能,你需要做的只是维护用户间的关系。全部自己实现的话就要维护太多东西了
pubby
2022-05-25 10:02:20 +08:00
“ps: 语音消息,问了一个大佬,他说发语音消息的时候,先录音成.mp3 文件到本地,然后发送到另一端,另一端接收播放这个.mp3 ,这....”

难道不是这样吗?
当然发送到另一端的可以是 mp3 文件,也可以是把文件存服务器,只发个播放地址过去。
godleon
2022-05-25 10:04:38 +08:00
@cutepeer 就是要自己做 SDK
TimPeake
2022-05-25 10:06:28 +08:00
忽然想起了 ‘像寻’公众号事件 , “”程序员都知道, 自己实现一套 IM 至少 2 个月以上“”
godleon
2022-05-25 10:11:26 +08:00
@murmur 不是作业级别的语音有什么传输更好一点呢
darkengine
2022-05-25 10:11:29 +08:00
语音消息就是录制好的 mp3 上传到服务器,发链接给对方,这个思路没毛病啊
godleon
2022-05-25 10:13:49 +08:00
@pubby
@darkengine

我没说有毛病,只是在想优质的 IM 做的这个功能,也是.mp3 文件嘛,就像 2 楼说的是不是 可以编辑为 2 进制传输,这效率不是高太多了
yukiww233
2022-05-25 10:17:30 +08:00
@godleon #10 有没有一种可能,mp3 也是一种高效率编码二进制文件呢
lakehylia
2022-05-25 10:17:32 +08:00
语音消息可以用电信的标准,一般用 AMR 。
lizy0329
2022-05-25 10:20:28 +08:00
0-1 难度不大 1-100 难度非常大
janus77
2022-05-25 10:21:09 +08:00
这种宽泛的问题肯定看实际情况啊,毕业设计和商业产品不一样,服务端和客户端不一样,包含功能的多少也可以有变化(比如撤回、引用回复、发语音、表情包、视频、文件等)
你什么都没说我只能当成 “找外包 1000 做一个微信” 来看待了
codehz
2022-05-25 10:22:01 +08:00
语音消息这么做也没啥问题,不过一般来说会有专门的格式编码——不需要多余的元数据,压缩算法专门针对(非即时的)语音场景
(另外二进制比文本效率高这说法槽点多到不知道从哪里开始说比较好((((
darkengine
2022-05-25 10:22:04 +08:00
@godleon

就像 2 楼说的是不是 可以编辑为 2 进制传输,这效率不是高太多了

-------------

不要一开始就考虑优化。而且 2 楼提到的 opus 一般用在实时语音领域,需求里一条条的语音消息,完全没必要上这个增加复杂度。
godleon
2022-05-25 10:22:25 +08:00
@lizy0329 认同,只实现功能应该问题不大,但是主要是要看你的期望是做到什么样,这就是无上线的了。
XiLingHost
2022-05-25 10:22:44 +08:00
@yukiww233 mp3 的问题不是在于授权协议吗
zsdroid
2022-05-25 10:25:17 +08:00
语音不用 mp3 ,用 amr ,体积小。语音消息有损压缩也没事。
还有长链接存储问题:
长链接无法存到数据库 /redis 中。那服务器 1 的用户给服务器 2 的用户发送信息,1 是找不到 2 下用户的 channel ,故无法直接发送信息。
bruce0
2022-05-25 10:38:18 +08:00
我的理解啊 做个能用的不难, 但是做个好用的 就是没有上限的了, 也就是挺难的

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

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

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

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

© 2021 V2EX