V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Wings0908
V2EX  ›  程序员

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

  •  
  •   Wings0908 · 2019-07-13 16:01:07 +08:00 · 4291 次点击
    这是一个创建于 1947 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    15 条回复    2019-07-14 18:41:51 +08:00
    elfive
        1
    elfive  
       2019-07-13 17:20:08 +08:00 via iPhone
    其他不知道,我就知道 QQ 主要以 UDP 协议为主,所以 socket 管理似乎不是很重要的事。
    secondwtq
        2
    secondwtq  
       2019-07-13 17:23:19 +08:00 via iPad
    QQ 早就不一定是 udp 为主了
    watzds
        3
    watzds  
       2019-07-13 17:57:12 +08:00 via Android
    每个在线用户都和微信服务器保持连接,每个连接都有用户 id 信息呗

    反正怎么都有用户 id,这有什么难的?
    Wings0908
        4
    Wings0908  
    OP
       2019-07-13 18:48:31 +08:00
    @elfive @secondwtq 感谢回复,以 UDP 为主的话,推送是个问题?
    @watzds 感谢回复,如果是这样,需要某个地方存储这个信息,缓存?上亿的数据,并且高实时性,还是不太清楚具体怎么做
    mattx
        5
    mattx  
       2019-07-13 18:55:54 +08:00
    基于可靠 UDP 的长连接, 推送不是问题吧? 推送一般对于短连接才是问题, 具体这么高流量和实时性, 你可以找下微信架构看看, 不像 12306 这样, 存在一个无法避免的热点, 会简单很多.
    misaka19000
        6
    misaka19000  
       2019-07-13 19:02:17 +08:00 via Android
    misaka19000
        7
    misaka19000  
       2019-07-13 19:03:06 +08:00 via Android
    ps 现在单机都能支持数百万的链接了,上亿链接维持起来并不难
    laravel
        8
    laravel  
       2019-07-13 19:03:09 +08:00
    会 go 语言的话,看看 gopush-cluster 分布式推送系统 机会了
    jaskle
        9
    jaskle  
       2019-07-13 19:34:47 +08:00 via Android
    又不是一台电脑,至于协议肯定是 tcp 为主,因为移动网络 udp 支持的非常差
    watzds
        10
    watzds  
       2019-07-13 20:20:35 +08:00 via Android
    @Wings0908 上亿没啥,分布式机器多就行。分区分而治之
    uyhyygyug1234
        11
    uyhyygyug1234  
       2019-07-13 21:01:07 +08:00
    新浪微博大 v 怎么给数千万的粉丝 push 消息
    seeker
        12
    seeker  
       2019-07-13 21:19:24 +08:00
    给你几个关键词:C10K problem, C10M problem.
    Wings0908
        13
    Wings0908  
    OP
       2019-07-13 23:59:45 +08:00
    @mattx @misaka19000 感谢回复,微信架构也看了,貌似没看到介绍如何管理连接的,所以就在这边问了下。
    @laravel @seeker 感谢回复,不过 C10k 这些貌似是单机问题?微信这种体量确实是分布式的。
    @uyhyygyug1234 微博这种的话,不太清楚是否对实时性要求很高。
    dosmlp
        14
    dosmlp  
       2019-07-14 15:13:58 +08:00
    dpdk 单机千万并发,全国布个几十台机器就可以了
    tempdban
        15
    tempdban  
       2019-07-14 18:41:51 +08:00 via Android
    @dosmlp 协议栈?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2774 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:28 · PVG 19:28 · LAX 03:28 · JFK 06:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.