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

rabbitMq 为什么不直接使用 TCP 发送消息,而是虚拟 channel?

  •  
  •   hercule · 2020-05-27 11:11:00 +08:00 · 1007 次点击
    这是一个创建于 1641 天前的主题,其中的信息可能已经有所发展或是发生改变。

    ”对于 OS 来说,建立和关闭 TCP 连接是有代价的,频繁的建立关闭 TCP 连接对于系统的性能有很大的影响,而且 TCP 的连接数也有限制,这也限制了系统处理高并发的能力。但是,在 TCP 连接中建立 Channel 是没有上述代价的。“

    上面这段话是很多技术文章写到的,也没具体的分析,我很纳闷,TCP 连接可以保持长连接,如果不显示关闭,也不会断开呀,我们也可以直接发送消息,只要不断开 TCP 就行,这样不会出现频繁的建立关闭 TCP 连接带来的开销啊。而且 channel 也是利用 TCP,简单来说,不管你多个 channel,始终是往一个 socket 上发送数据。除了 channel 有私密性以外。本质上为什么这样设置,如果只是系统消耗,好像说不过去。 如果是 http,我还能理解,一种 request/response 型的协议,为什么要做成 request/response 这种类型呢,因为 server 端要服务的 client 太多了,如果每一个连接都保持而不断开,那么服务器的 IO 很快就会被堵死了。但是 rabbitMQ 有点理解不了。 如果哪位大神知道为什么,麻烦指点一下。

    RicardoY
        1
    RicardoY  
       2020-05-27 19:54:02 +08:00 via iPhone
    channel 好像是 erlang 的原生概念
    hercule
        2
    hercule  
    OP
       2020-05-27 19:56:38 +08:00 via iPhone
    @RicardoY 谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2809 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 14:35 · PVG 22:35 · LAX 06:35 · JFK 09:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.