本地程序到程序数据stream的替代TCP / IP?

我有一个GNU C ++程序和一个python脚本,需要相当频繁地将string传递给对方(每分钟约70-80条消息)。 他们将在CentOS(在相同的环境中托pipe)中彼此本地运行。 感觉虽然TCP / IP可以完成工作,但我还有其他的select吗?

请记住,我不能把我的C ++程序变成SO,并使用ctypes将其整合到我的Python脚本中,我的C ++程序必须以32位编译,而我的Python脚本必须是64位。

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

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

命名管道是标准方法。 在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') 

请注意,在现代系统中,70-80信息/分钟并不是那么高,TCP仍然是一个可行的选择。 另外要小心,没有一个字符串大于管道缓冲区大小(一般为64K)。

根据评论中的建议,我还添加了一个UNIX域套接字的示例,如果您需要双向通信,那么这些套接字更有用。

 # 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() 

http://tldp.org/LDP/tlk/ipc/ipc.html

  • 管道
  • 命名管道
  • TCP套接字
  • UNIX域套接字
  • 消息队列
  • 共享内存

到目前为止,我更喜欢TCP套接字。

  1. 你已经写了对他们的支持,
  2. 它们在机器内部和机器内部都可以很好地工作。
  3. 有很好的工具来调试通信通道。
  4. 有些图书馆可以帮助他们使用。

也许你可以使用命名管道?