1
ZGame 2023-07-26 08:32:38 +08:00
当从客户端来说 流畅没啥值得特别的地方吧... 只要不在里搞骚操作就行。同步不懂 ,感觉这个才是重点..
|
2
meisen 2023-07-26 08:38:05 +08:00 9
靠内存,举例 Mac 上 TG 随随便便内存就占 2 GB ,而微信才 100+MB
|
3
CocoCoding 2023-07-26 08:40:09 +08:00 1
国内也能做到,技术上能做到,政策不同意估计,最多几千人
|
4
memedahui 2023-07-26 08:43:33 +08:00 1
我觉得是流畅是应为体积小,功能够用,重点是没有埋点,没刷盘,没内容审核
|
6
wu67 2023-07-26 08:48:30 +08:00 1
|
7
unafraid7580 2023-07-26 08:50:04 +08:00 via Android 1
的确 我已经把微信也迁移到电报了 流畅省心
|
8
banliyaya 2023-07-26 08:50:15 +08:00
@CocoCoding 可是我即使没有超过 500 人的群 怎么还那么卡。mac 的每次打开微信还算正常一点,但是 windows 开机启动微信之后都得无响应几秒钟让它来同步消息,跟 tg 来对比 简直是天壤之别
|
9
winterbells 2023-07-26 08:55:20 +08:00 via Android
@banliyaya tg 打开每个频道只同步几条消息,点进去才开始加载内容
|
11
opengps 2023-07-26 08:58:27 +08:00
十几万人并不是同时在发消息,实际并发没那么高吧
|
12
lucifer9 2023-07-26 08:59:12 +08:00
Mac 上如果是 app store 渠道的 tg ,内存占用一般一直正常
如果是从 tg 官网直接下载的,内存使用会随着运行时间持续增加 |
13
ispinfx 2023-07-26 09:00:52 +08:00
为啥我在 mac 上才占 300 多 M ?
|
14
liy333 2023-07-26 09:05:59 +08:00 via iPhone
tg 几个大佬是全球顶尖的。国内开发同样的功能,估计要用五倍的开发团队,十倍的服务器资源,才能勉强达到同样的效果。
|
15
TrembleBeforeMe 2023-07-26 09:06:53 +08:00
十几万人的群只是通知群吧,仅有少数人可以发消息
|
16
tagtag 2023-07-26 09:11:56 +08:00
我想知道这么多聊天记录是怎么存储的
|
17
NeedforV2 2023-07-26 09:15:09 +08:00
@unafraid7580 ??这样也能迁移?请问怎么操作?
|
19
xubingok 2023-07-26 09:21:39 +08:00 1
1.正常.
没错,原生应用就是这么屌(android 开发者路过). 2.也没啥技术难点啊. TG 不像微信,没有多乱七八糟的消息类型,群聊消息占不了多少本地存储.其他的就更不值一提了. |
20
nothingistrue 2023-07-26 09:24:45 +08:00
十几个万人群 ≠ 十几万人同时在线的群 ≠ 十几万人同时在线还发言的群。当然就算是十几万人同时在线的群,压力也是在服务器那边,对于客户端来说,不管几个人的群,都是只跟服务器维持一个数据连接频道,最多也只是同时发言的人多的时候,接受数据更频繁而已。
|
21
gosrider 2023-07-26 09:24:55 +08:00
@yyzh #5 去加载下不同群组的聊天记录试试,我刚打开内存占用 100m ,随便加载了下群组的消息,现在到了 1G 多
|
22
codeisjobs 2023-07-26 09:25:38 +08:00 2
各平台都是用各原生代码写的。技术先进,代码规范,极致的优化,没有乱七八糟的功能占用性能,吊打一众跨平台方案。
|
23
jZEdn7k4 2023-07-26 09:35:32 +08:00
本地缓存这么小?我日常用没加过超过 20 人的群,总共就几个群,缓存好几个 G ,你那个十几万人的群只是通知 channel 吧,不是所有人都能发消息的
|
24
dynastysea 2023-07-26 09:38:27 +08:00
@CocoCoding 技术上本身问题就不大,消息收发这个可以理解为本身每个人就是一个分布式的客户端,几百人和几千人对客户端来说其实没啥区别。只不过是后端负载大点罢了。但是后端的问题其实也不难解决。难的确实是政策,限制太严格了,以前钉钉还可以搞万人群。现在直接一刀切,限制 500 人。
|
25
dynastysea 2023-07-26 09:45:34 +08:00 7
tg 本身我觉得没啥值得学习的,wx 做的比它更好。wx 在 IM 的技术层面真的做的足够简洁和高效(它的消息收发原理简单到很多不懂技术的讲讲都能听得懂,但市面上很多的 IM 都把这套方案做的很复杂)。很多人其实想不到微信和 qq 邮箱的核心原理是一样的。。。
多说一点,单纯从技术层面看,不要看不起国内互联网的技术,单纯互联网 app 这块来说,国内程序员的水平真的很强。。。因为经历过很多用户的洗礼以及各种奇葩变态需求的考验,而且互联网应用本身其实没太高技术含量,在这种技术门槛不高的地方,国内的程序员能卷出花来。当然不是说我们真的很强,在基础领域、创新方面我们很差。只不过中国人拥有人口优势,在不需要做技术突破的场景下,我们是可以卷上天的。 |
26
C603H6r18Q1mSP9N 2023-07-26 09:47:48 +08:00 2
用的共享 socket ,简单理解 主服务器 长链接 10 个客户端,10 个客户端再链接 10 个;很部分压力转接到客服端了
|
27
securityCoding 2023-07-26 09:54:00 +08:00 via Android
聊天消息的包很小,seq+batch+预加载
|
28
me1onsoda 2023-07-26 10:02:27 +08:00
钞能力吧,内存够大都好说
|
29
hakr 2023-07-26 10:04:50 +08:00
确实厉害, 比起 wx 来强太多了
|
30
wulili 2023-07-26 10:11:51 +08:00
十几个万人有啥用,又不是每个人都能发消息,这种群上百万人都没问题
wx 要比它复杂的多 |
32
pkoukk 2023-07-26 10:24:09 +08:00
@dynastysea #25 所以锅在张小龙?产品垃圾?
|
34
yolee599 2023-07-26 10:34:42 +08:00 1
确实,一线城市的色色群都是十万人以上的,每个人都能发消息,每次打开未读消息都有几万条,但还是很流畅
|
35
icebow 2023-07-26 10:42:51 +08:00 via iPhone 10
不明白为什么总是有人说:又不是十万人都发消息,难道微信 500 人群每个人都在发消息?微信该卡还是卡
|
36
freepoint 2023-07-26 10:59:29 +08:00
那么问题来了:Tg 上你们都关注什么频道和群组?
|
37
heyleo 2023-07-26 11:47:57 +08:00
来吧,献出大家的电报群
|
38
mcluyu 2023-07-26 11:54:19 +08:00
其他 IM 的群好像也不卡吧, 人数限制那应该是其他原因,不是因为会卡吧
|
39
lqcc 2023-07-26 11:57:11 +08:00
@unafraid7580 请问如何将微信迁移到 tg ?
|
40
2000wcw 2023-07-26 12:18:37 +08:00 1
@dynastysea 对普通用户来说,流畅好用就是先进,谁会管你架构是不是最 NB 的?
|
41
anjingdexiaocai 2023-07-26 12:31:10 +08:00 via Android
最疑惑的点是服务器,流量这些是怎么解决,怎么这么豪😂😂
|
42
unafraid7580 2023-07-26 12:32:27 +08:00 via Android 3
|
43
dlsflh 2023-07-26 12:34:33 +08:00 via Android
没有张小龙拖后腿
|
45
hepin1989 2023-07-26 12:49:23 +08:00
很好做,可是,zc 让 500 人群。
|
46
sky96111 2023-07-26 12:49:41 +08:00 via Android
@meisen Android 上同样是挂在主页什么都不干,tg 占用 212MB 内存,微信占用 532MB
|
47
edinina 2023-07-26 12:52:15 +08:00 1
确实,App 打开更新几秒,几万条的聊天记录都是随便划拉。相对应的,微信往上翻消息,加载顿挫感强烈。
|
48
ysy950803 2023-07-26 12:54:14 +08:00 via Android
其实 IM 技术本身没有什么太大的壁垒了,Server 侧反正力大砖飞,Client 的话技术也是熟透了的,TG 的 App 源码全部开放到 Github 的,你会发现他们的 Android 实现几乎没有 xml 文件来写 UI ,全是 Java 代码直接绘制的,我没有细看,不知道是用的什么框架,大致看就是节省了 xml 解析和布局 inflate 的耗时。
|
50
darklost 2023-07-26 14:19:22 +08:00
看过 TG 的客户端源码,也没啥框架,老毛子特色纯代码铺,
消息协议层好像是 c++ 做的统一的,盲猜兼具新能和跨平台开发效率考虑? |
51
Edward5937 2023-07-26 14:53:39 +08:00
TG 如果要想在大陆上市使用,也会变成微信这幅模样
相信 TG 很多人都是用来订阅频道的,微信不单单是 IM ,就是一个小程序平台 |
52
dianso 2023-07-26 15:04:53 +08:00
啥也不干,我 win11 32G 内存给我用 2.5G
|
53
aptx4689 2023-07-26 15:17:11 +08:00
telegram 的本地聊天记录挂了之后基本上就恢复不了
|
55
cxsz 2023-07-26 15:24:46 +08:00
|
57
yvkino 2023-07-26 16:30:39 +08:00
消息记录搜索也是秒加载,太能了
|
58
YGHMXFAL 2023-07-26 16:35:47 +08:00
官网下载的安卓客户端,内存泄漏,有一年了吧?也不知道是不是我这备用机(猴家)的问题?换第三方客户端了
|
59
lisxour 2023-07-26 16:37:03 +08:00
@edinina 我比较肯定地说,应该是微信做了限制,正常来说,只要服务器连接通畅,应该都能做到秒拉的,从微信收发文件、收发图片的速度就大概猜得出来,不管你网多快,都是几百 kb 的收发,所以无疑是做了限制。
|
60
good1uck 2023-07-26 16:41:17 +08:00 via Android
都在发表高见就没有一个说是怎么实现的
靠谱的有讲 10 几万的是通知群。就好比公众号,你猜有多少万人订阅?技术实现和群聊肯定不一样啊 |
61
a0000 2023-07-26 16:47:18 +08:00 via Android
@Edward5937 最开始是可以在大陆使用的,没有被墙,那时就非常丝滑,甩微信好几条街
|
62
Katrol 2023-07-26 16:53:31 +08:00
微信技术挺复杂的,卡加占用大是因为里面有很多东西
|
63
BBCCBB 2023-07-26 16:58:29 +08:00
万人大群技术上还是很难的.. 成百上千个万人大群技术上就更难了
|
64
AppJun 2023-07-26 16:58:42 +08:00
|
65
bk201 2023-07-26 16:58:54 +08:00
对比微信。可能一个消息要过服务器,一个消息不过服务器。微信还要涉及舆情内容分析之类的。整个内容复杂度应该是不一样的。
|
66
BBCCBB 2023-07-26 16:58:55 +08:00
discord 这种也是, 超大群.. 技术上很难.
|
67
pengtdyd 2023-07-26 16:59:14 +08:00
老毛子的计算机水平还是值得肯定的,这是圣彼得堡的传统艺能,看家技能,哈哈哈
|
68
BBCCBB 2023-07-26 17:00:39 +08:00
qq 不就可以创建超过 500 人的群吗..
微信 500 个人和张小聋设计理念以及技术选型有关.. 微信应该是用的写扩散. 简单但服务端存储成本, 扩散系数较高.. 无法支持太多人的群. |
69
iamqk 2023-07-26 17:02:09 +08:00
功能单一
|
70
clf 2023-07-26 17:14:30 +08:00
应该是只加载最新的 N 条吧。在搜索信息的时候就基本很难搜到自己想找的云端记录了。
|
71
nocity 2023-07-26 17:31:03 +08:00
@lisxour 微信聊天记录都在本地,向上拉取应该是读本地的数据库,拉取历史聊天记录的确没有 tg 顺滑,可能是本地数据库比较复杂或者是 UI 层设计逻辑问题。tg 在 iOS 客户端使用了自己修改的 Texture (AsyncDisplayKit),滑动过程中数据加载,布局计算都是后台线程,后台线程准备好数据和布局后再更新到主线程界面,用户一边划动一边加载,转圈圈比较少。
|
72
ciki 2023-07-26 17:49:10 +08:00
确实挺流畅的,就是缓存的视频有点多
|
73
AppJun 2023-07-26 18:06:40 +08:00 6
作为做过几年的 IM 相关的 iOS 程序员稍微说一下,其实像 Telegram 这种用服务器保留了所有未被删除信息的 IM 服务而言,先天上对那些架构上(不考虑审核目的)没有存储用户的聊天内容导致不支持从最开始拉取消息的 IM 服务(比如微信而言),在很多方面是有很大优势的。主要说 IM 部分,微信的其他各种服务塞进来以及技术含量很高的小程序不在讨论范围。
简单的说其实也是一种钞能力,用服务器成本来换来多端客户端的任务的简易性,最终靠简易性省掉了很多麻烦: 1. 每次打开只需要拉取少量的数据,就能让用户大致了解群组的情况。 - 比如用户在上次使用到下次使用期间,他有十个 500 人的群组,每个群组本来里面原来有 500 人 -> 550 人,其中一些人改了昵称,也不需要下载群组变化的 550 人的信息,只需要获取一个群组消息就可以,然后获取消息的时候把对应说话的用户信息也返回过来,而那些不说话的用户信息,有需要点击进群组的时候再依次加载。但是类似微信,他要下载 550 人的信息。 - 如果这些群组产生了 2W 跳未读,这时候,其实他只需要拉取每个群组最老的 10 条未读和最新的 10 条未读,就能满足点击进去能看到好像都加载下来的数据,如果消息显示完了,就再请求服务器。这里只需要你和服务器的通讯速度够快,预加载的时机合适就行。但是类似微信,他必须把所有的 2W 条信息基本都下载下来。这也是为什么很多人的微信打开在转圈的时候,因为很多人特地把微信的“后台 App 刷新”给关了。 2. 客户端职责简单 - 主要的内容就是做几个 list ,把大家的聊天内容展示出来,处理未读/已读,根据更新 ID 请求数据等等。 - 而微信,就特别需要有很强的投入在数据库优化上。因为聊天记录都在本地,又要在手机可能不太好的性能条件下,加载搜索之类的行为卡顿不能太明显的前提下,尽可能保证用户体验。 3. 多端效果比较一致 - 毕竟每个客户端只是拉取信息,虽然可能和“同步”的概念有点不一样,但是用户感受到的就是数据对得上。 4. 遇到版本升级,历史垃圾文件清理的时候,Telegram 会有更大的余裕来处理,毕竟用户数据如果损坏了?再拉就好。微信则会面临垃圾越堆越多,一不小心弄坏用户记录可就很头疼的状态。 但是微信这种没有服务器从头拉取数据的选择有什么好处呢? 我个人觉得主要是几点: 1. “省钱”,如果用拉取服务器模式,那么现在腾讯可能要 10x 倍的服务器投入,按照国内这个使用频率和覆盖率。那你可能除了朋友圈/公众号的广告外,应该也会看到 Telegram 那样子的群组广告/会员模式之类盈利的操作。 2. 在性能同样的情况下,搜索的体验可能比 Telegram 必须调用服务器 API 请求历史数据来得好。 3. 宣传点可以多一个隐私,而且用户需要担心自己历史聊天记录丢失的同时,哪天被哪个脚本小子盗号导致十多年来的聊天记录被传播开来的风险也降低,如果微信用的是 Telegram 的模式,我相信这几年很多吃瓜事件,怕是会有一大堆更没必要更详尽的聊天记录流出。 4. 微信也能省去很多麻烦,比如聊天数据库被拖库之类的情况。 整体而言,各家有各家的实际和困难,用不同的代价,换来不同的优势。 其实很多事从一开始的选择就会导致一些必然的结果。有人说技术到一定程度就跟魔法一样。我觉得其实很多时候,App/互联网对一些不太熟悉的人而言,就是这类魔法的存在。比如楼里的很多人,基本都处于这种状态。 |
74
datoujiejie221 2023-07-26 18:48:18 +08:00
服务端实现应该和推送服务器架构差不多,类比一下,一个个 app 相当于群,每个设备相当于群里的人,给 app 推送相当于给群发消息。我觉得这个量级不比十几个万少吧,微信感觉不是技术上做不到万人群,应该更多的是防止信息快速扩散。
客户端主要还是针对存储的优化、ui 重用和预渲染等等,其实客户端源码都是开放的,有兴趣可以研究。 |
75
j20001112 2023-07-26 19:05:53 +08:00 via iPhone
@AppJun 我微信聊天记录从 6.7 版本备份恢复到电脑然后删除重装升级到 7.0 跨越几个版本更新就出现聊天记录数据库错乱,A 与 B 的聊天记录显示成都是 B 发送的。害得我聊天记录作为法院的证据失效损失上百万。
|
76
putaozhenhaochi 2023-07-26 19:09:24 +08:00 via iPhone
你看看真正同时在线的有多少
|
77
cslive 2023-07-26 19:38:26 +08:00
手机上的 qq ,差不多也是流畅无限滚动,丝滑的很
|
78
wangxiaoaer 2023-07-26 19:42:19 +08:00 via iPhone
@dynastysea 技术这么牛逼为什么做出来的客户端那么卡?
|
79
totoro52 2023-07-26 20:58:23 +08:00
@wangxiaoaer 面向老板 面向用户开发, 你在公司的时候产品规划能听自己的吗
|
80
dynastysea 2023-07-26 22:16:57 +08:00
@wangxiaoaer 你的 tg 的数据量有 wx 的十分之一吗? tg 的功能有 wx 那么丰富吗?你别给我扯什么为什么微信要加那么多乱七八糟的功能,这里我说的就是技术层面。wx 在这么恶劣的条件下做到现在这水平就是很厉害啊。。
|
82
iseki 2023-07-26 22:54:46 +08:00 via Android
说真的,单看 IM 部分,我真没看出来微信哪里比 tg 先进🤣最多也只能说是吹得厉害;别的东西不要拿来比,那是 IM 么?
tg 的服务端没开源,但从蛛丝马迹上多少能看出来,频道的实现和大群的实现应该差不多,这俩本质上也没多大区别 |
83
BigShot404 2023-07-26 23:01:43 +08:00
多和用户交流装逼,少打高尔夫。事实证明,在公众面前装逼的确促进发展。
|
84
nexo 2023-07-27 00:01:27 +08:00 1
@dynastysea 语音视频聊天为啥手机那么烫呢 facetime 就没有 为啥 wx 那么占内存 求解读是什么技术导致这么厉害的
|
85
icaolei 2023-07-27 00:11:26 +08:00
@gosrider #21 Windows 11 23H2 刚刚试了下,Windows Store 版。
启动时 120M 左右。 打开币安 14 万人的群组 + 在花茶馆 4 万人的群组,内存 123M 左右。 然后我把全部的 17 个正经群组都开了一遍,基本都是几千人到几万人这种,内存 149M 左右。 |
87
deadfishS 2023-07-27 08:38:25 +08:00
昨天才清掉 80 多 g 的缓存,也许是因为我加的都是各种浮力群
|
88
Edward5937 2023-07-27 10:12:07 +08:00
@a0000 我的意思是要在中国审查制度下的正常访问
|
89
ZeroDu 2023-07-27 10:43:24 +08:00
tg 上最多见过 20w 人的,确实不卡,全平台都不卡;
|
90
lgapple 2023-07-29 16:12:09 +08:00
@unafraid7580 微信怎么迁移到电报,微信非常垃圾但是因为垄断又没办法不用
|
91
Nerv 2023-07-31 16:56:20 +08:00 2
@dynastysea 微信这玩意到现在还没解决消息不一致的问题,手机上收到的消息电脑上不显示或只显示一部分,即使选了同步最近的消息也无济于事,对一个聊天软件来说,这点基本的东西都做不到,谈何简洁高效。
|
92
dynastysea 2023-07-31 23:31:42 +08:00
@Nerv 这个不算是 bug ,更多算是 feature ,微信有个机制就是服务端会确认客户端已收取的微信消息 ID ,已下发的不再会重复下发。多设备这个具体下发到什么时间点的消息微信倒也没公开具体的规则。所以这点用户其实会比较难理解。但这个不是技术层面的因素导致。
|
93
wkong 2023-08-02 22:43:53 +08:00
|
94
kuituosi 2023-08-03 12:44:11 +08:00
万人群的技术并不复杂,内容都是按需加载的。tg 技术真正牛逼的地方是多 idc 数据同步,不同地方人聊天依然很流畅
|
95
keenwon 2023-09-28 16:41:56 +08:00
|
96
dynastysea 2023-10-01 21:47:08 +08:00 1
@keenwon 每个用户都有自己的一个消息列表,可以简单理解为 ID 自增,无论单聊还是群聊都是往自己的消息列表里插入一条消息,收取消息只需要读取自己的消息列表即可。
|
97
silvernoo 14 天前
tg 不是简单的流畅,我跑到一台 2c8g 的虚拟机上,处理器是老奔腾,没有通显卡,流畅的像 native ,简直可怕
|
98
silvernoo 14 天前
更可怕的是我下载了上千个文件,理论上在一个队列里排队下载。然而我正在浏览的那个文件,就会被有限下载。这样的优化程度真没几个 app 做得到,不管国内还是国外的
|