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

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

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

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

    其实看一下你的路由表你就明白了, 不行你就 tcpdump 抓包看下就很显然了
    duanhui8
        20
    duanhui8  
    OP
       2018-04-29 11:01:56 +08:00
    @kongkongyzt 谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2996 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 14:00 · PVG 22:00 · LAX 06:00 · JFK 09:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.