• 请不要在回答技术问题时复制粘贴 AI 生成的内容
duanhui8
V2EX  ›  程序员

Linux 本地网络程序如何通信方式?

  •  
  •   duanhui8 · Apr 26, 2018 · 4349 views
    This topic created in 2964 days ago, the information mentioned may be changed or developed.
    在 linux 服务端部署一个 ActiveMQ 消息队列,使用 c++服务端的程序,将消息压入消息队列中使用( createCMSConnectionFactory( "tcp://192.168.10.11:61616" ) ))
    请教大神,这种方式数据流,是走的网卡?还是 socket 文件?还是内存?
    Supplement 1  ·  Apr 26, 2018
    补充:c++程序和 activemq 在同一台服务器上
    20 replies    2018-04-29 11:01:56 +08:00
    duanhui8
        1
    duanhui8  
    OP
       Apr 26, 2018
    求高手解答
    Renylai
        2
    Renylai  
       Apr 26, 2018
    不熟悉 activeMQ 做法,小菜鸟我觉得这个写法走的网卡 TCP,如果是定义了管道文件.sock 走的是管道,内存的话就更不是这么写的了
    duanhui8
        3
    duanhui8  
    OP
       Apr 26, 2018
    毕竟是本地通信,有没有可能被转换为共享内存的方式,传输?
    duanhui8
        4
    duanhui8  
    OP
       Apr 26, 2018
    有高手能给个肯定的答案吗
    pagict
        5
    pagict  
       Apr 26, 2018
    如果是写 192.168.10.11 的话,还是会走网卡的吧
    如果写 localhost 或者 127.0.0.1,目测就直接内存了
    tempdban
        6
    tempdban  
       Apr 26, 2018 via Android
    都不走网卡直接环回
    duanhui8
        7
    duanhui8  
    OP
       Apr 26, 2018
    @tempdban 老哥 厉害了,这种方式通信性能如何?
    tempdban
        8
    tempdban  
       Apr 26, 2018 via Android
    @duanhui8 这块的性能暂时不是你需要考虑的点。
    duanhui8
        9
    duanhui8  
    OP
       Apr 26, 2018
    @tempdban 感谢
    htfy96
        10
    htfy96  
       Apr 26, 2018
    Linux 本机回环有 fast path,虽然比 domain socket/pipe 还是慢一些(延时在 2x 左右,吞吐在 3x 左右),但不到万不得已不要考虑这些性能
    duanhui8
        11
    duanhui8  
    OP
       Apr 26, 2018
    @htfy96 谢谢。在做基础软件,高并发,高数据量,性能要求高,所以考虑性能多点。
    既然没什么问题,先从其他方向优化了
    tempdban
        12
    tempdban  
       Apr 26, 2018 via Android
    @duanhui8 去拿 vtune 跑一下,瓶颈全出来了
    changnet
        13
    changnet  
       Apr 26, 2018 via Android
    不懂 ActiveMQ,但是按照惯例,127.0.0.1 或者 localhost 才是走回环。你这个应该是走网卡。因为默认根据 ip 寻址你这个就是你网卡的地址。
    duanhui8
        14
    duanhui8  
    OP
       Apr 26, 2018
    @tempdban 好的,我去了解一下,谢谢
    rrfeng
        15
    rrfeng  
       Apr 26, 2018 via Android
    都是直接走 localhost 的。不管你填写哪个网卡的 IP 地址,这种包你甚至 tcpdump 抓不到,因为不会经过网卡的 buffer
    tempdban
        16
    tempdban  
       Apr 26, 2018 via Android
    @rrfeng 你抓一下环回网卡 lo 有惊喜
    htfy96
        17
    htfy96  
       Apr 26, 2018
    @changnet 在比较现代的内核上,包不会发给网卡驱动,查了 ARP 表之后是本机地址会直接走 fast path。可以开个 iperf,然后运行前后 ip addr -s 看一下 tx packets 的变化,就能发现走的还是 lo
    flynaj
        18
    flynaj  
       Apr 26, 2018 via Android
    走网络啊,本机看路由表,可能走 lo,网络协议方便以后服务端分开,
    kongkongyzt
        19
    kongkongyzt  
       Apr 26, 2018
    今天遇到了类似的, 不过我的是 MySQL

    localhost 的时候走的 unix domain socket.
    127.0.0.1 的时候走的本地回环
    192.168.0.103 (局域网中本机 ip) 的时候走的网卡

    其实看一下你的路由表你就明白了, 不行你就 tcpdump 抓包看下就很显然了
    duanhui8
        20
    duanhui8  
    OP
       Apr 29, 2018
    @kongkongyzt 谢谢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   838 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 20:07 · PVG 04:07 · LAX 13:07 · JFK 16:07
    ♥ Do have faith in what you're doing.