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

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

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

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

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