本地程序到程序数据流的TCP/IP替代方案? 我有一个GNU C++程序和一个Python脚本,需要很频繁地传递字符串(一分钟70-80条消息)。它们将在CentOS中彼此本地运行(托管在同一环境中)。它认为,尽管TCP/IP能够并且将完成这项工作,但我还有什么其他选择 记住,我不能将C++程序转换成一个SO,并使用cType将其集成到Python脚本中,我的C++程序必须在32位编译,而我的Python脚本必须是64位。 < P>也许你可以使用命名管道?< /P> < P>标准管道是标准方法。在Python中: import os os.mkfifo('/some/path') # Reading process with open('/some/path') as pipe: for line in pipe: # Do what you need # Writing process with open('/some/path', 'w') as pipe: while True: # Whatever looping process you have pipe.write('<data>' + '\n')

本地程序到程序数据流的TCP/IP替代方案? 我有一个GNU C++程序和一个Python脚本,需要很频繁地传递字符串(一分钟70-80条消息)。它们将在CentOS中彼此本地运行(托管在同一环境中)。它认为,尽管TCP/IP能够并且将完成这项工作,但我还有什么其他选择 记住,我不能将C++程序转换成一个SO,并使用cType将其集成到Python脚本中,我的C++程序必须在32位编译,而我的Python脚本必须是64位。 < P>也许你可以使用命名管道?< /P> < P>标准管道是标准方法。在Python中: import os os.mkfifo('/some/path') # Reading process with open('/some/path') as pipe: for line in pipe: # Do what you need # Writing process with open('/some/path', 'w') as pipe: while True: # Whatever looping process you have pipe.write('<data>' + '\n'),c++,python,linux,networking,gcc,C++,Python,Linux,Networking,Gcc,如果您已经有TCP或UDP服务器,最简单的方法可能是切换到UNIX域套接字 它们以“流”和“数据报”模式出现,就像TCP/UDP套接字一样,而且它们总是本地的,因为它们使用文件系统名称空间(而不是像TCP/UDP这样的端口号)。 管道 命名管道 TCP套接字 UNIX域套接字 消息队列 共享内存 到目前为止,我更喜欢TCP套接字 你已经为他们写了支持书 它们在机器内部和机器内部都同样有效 有很多很棒的工具来调试通信通道 有图书馆可以帮助他们使用 你知道C++结尾会是什么样子吗?我不确定是什么

如果您已经有TCP或UDP服务器,最简单的方法可能是切换到UNIX域套接字

它们以“流”和“数据报”模式出现,就像TCP/UDP套接字一样,而且它们总是本地的,因为它们使用文件系统名称空间(而不是像TCP/UDP这样的端口号)。

  • 管道
  • 命名管道
  • TCP套接字
  • UNIX域套接字
  • 消息队列
  • 共享内存
到目前为止,我更喜欢TCP套接字

  • 你已经为他们写了支持书
  • 它们在机器内部和机器内部都同样有效
  • 有很多很棒的工具来调试通信通道
  • 有图书馆可以帮助他们使用

  • 你知道C++结尾会是什么样子吗?我不确定是什么库做的。不过命名管道是单向的。UNIX域套接字是双向的,因此可能更适合“交换消息”。@user1040625它被视为一个文件,因此您可以使用标准的fopen/fread/fwrite调用<代码>mkfifo在sys/stat.h.+1中提供,我非常喜欢这种方法,因为它允许您在将来以最少的代码重写将两个进程轻松地分离到不同的框中。但是,使用UNIX域套接字比使用TCP/UDP套接字有什么优势?通过TCP/ip使用域套接字的优缺点是什么?使用TCP和UDP会占用一个端口。当然,您只能绑定到localhost,但它仍然是一个端口。如果有人将其配置错误,并使其在所有接口上侦听,则它可能会受到其他地方的攻击。然后,IPv4/IPv6的切换开始发生。到处都是头痛。使用UNIX域套接字,您可以在文件系统中具有写访问权限的任何位置创建更多套接字。如果需要,您可以随时将其重写为使用TCP/UDP。@Rob:您可以使用UNIX权限控制对UNIX域套接字的访问;您可以通过UNIX域套接字传递文件描述符;您可以传递内核验证的PID、UID和GID凭据;您可以将
    SOCK\u SEQPACKET
    与UNIX域套接字一起使用。是什么引起了您的关注?您对使用TCP/IP不满意有什么原因吗?在不知道TCP有什么问题的情况下,很难有效地推荐一个替代方案。TCP/IP感到普遍的好奇和唠叨……没有必要。您不需要协议提供的整个流控制/传递保证/握手。每分钟70-80条消息的速率非常低,因此花任何时间优化IPC机制都是浪费时间。无论你能以最快的速度编写什么,都是最好的选择。我不知道你的C++程序是什么,但是我会认真考虑你是否应该用Python写整个事情,避免完全的消息传递。
    # Server Side
    
    import socket
    
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    sock.bind("/some/path")
    
    sock.listen(1)
    conn, addr = sock.accept()
    
    while True:
        data = conn.recv(1024)
        if not data:
            break
    
        # Let's echo it back as an example
        conn.send(data)
    
    conn.close()
    
    # Client Side
    
    import socket
    
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    sock.connect("/some/path")
    
    while True: # Your sending loop
        # In this case we send hello world, and print what we get back.
        sock.send('Hello, world')
        data = sock.recv(1024)
    
        print data
    
    sock.close()