比较好奇微信, qq, facebook 是如何管理 socket

2019-07-13 16:01:07 +08:00
 Wings0908

如题,毕竟以这些 app 的表现上来看,上亿人同时在线?那么 A 用户向 B 用户发送了一条消息,是如果精准的投递到 B 用户 app 上的?

4310 次点击
所在节点    程序员
15 条回复
elfive
2019-07-13 17:20:08 +08:00
其他不知道,我就知道 QQ 主要以 UDP 协议为主,所以 socket 管理似乎不是很重要的事。
secondwtq
2019-07-13 17:23:19 +08:00
QQ 早就不一定是 udp 为主了
watzds
2019-07-13 17:57:12 +08:00
每个在线用户都和微信服务器保持连接,每个连接都有用户 id 信息呗

反正怎么都有用户 id,这有什么难的?
Wings0908
2019-07-13 18:48:31 +08:00
@elfive @secondwtq 感谢回复,以 UDP 为主的话,推送是个问题?
@watzds 感谢回复,如果是这样,需要某个地方存储这个信息,缓存?上亿的数据,并且高实时性,还是不太清楚具体怎么做
mattx
2019-07-13 18:55:54 +08:00
基于可靠 UDP 的长连接, 推送不是问题吧? 推送一般对于短连接才是问题, 具体这么高流量和实时性, 你可以找下微信架构看看, 不像 12306 这样, 存在一个无法避免的热点, 会简单很多.
misaka19000
2019-07-13 19:02:17 +08:00
misaka19000
2019-07-13 19:03:06 +08:00
ps 现在单机都能支持数百万的链接了,上亿链接维持起来并不难
laravel
2019-07-13 19:03:09 +08:00
会 go 语言的话,看看 gopush-cluster 分布式推送系统 机会了
jaskle
2019-07-13 19:34:47 +08:00
又不是一台电脑,至于协议肯定是 tcp 为主,因为移动网络 udp 支持的非常差
watzds
2019-07-13 20:20:35 +08:00
@Wings0908 上亿没啥,分布式机器多就行。分区分而治之
uyhyygyug1234
2019-07-13 21:01:07 +08:00
新浪微博大 v 怎么给数千万的粉丝 push 消息
seeker
2019-07-13 21:19:24 +08:00
给你几个关键词:C10K problem, C10M problem.
Wings0908
2019-07-13 23:59:45 +08:00
@mattx @misaka19000 感谢回复,微信架构也看了,貌似没看到介绍如何管理连接的,所以就在这边问了下。
@laravel @seeker 感谢回复,不过 C10k 这些貌似是单机问题?微信这种体量确实是分布式的。
@uyhyygyug1234 微博这种的话,不太清楚是否对实时性要求很高。
dosmlp
2019-07-14 15:13:58 +08:00
dpdk 单机千万并发,全国布个几十台机器就可以了
tempdban
2019-07-14 18:41:51 +08:00
@dosmlp 协议栈?

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

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

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

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

© 2021 V2EX