我想为同一系统上的两个Python程序使用Unix套接字来相互通信。你知道吗
这里有绑定到套接字文件的示例:https://gist.github.com/jmhobbs/11276249
常用的socketserver库还有一个UnixStreamServer和一个UnixDatagramServer,听起来它也处理unix套接字,但是没有任何一个示例,据我所知,在初始化UnixStreamServer或UnixDatagramServer时,它需要一个IP和端口,而不是一个文件。你知道吗
UnixDatagramServer和UnixStreamServer是演示here的不同类型的unix套接字吗?或者我只是没有看到如何使用它们来正确地连接到套接字文件?有例子吗?为什么有人会像在我的链接中那样直接使用UnixDatagramServer/UnixStreamServer绑定到socket文件?你知道吗
当谈到IP套接字时,TCP/UDP之间的区别是有意义的——一个是可靠的,而另一个不是,没有开销。在一个套接字的世界里,我假设没有不可靠的通信,为什么还有两种不同的类型(数据报和流)?你知道吗
不要使用插座。使用管道。你知道吗
在网络中,套接字本质上是应用层和传输层之间的链接。这就是为什么你需要提供一个IP和端口号-这些是重要的地址信息,任何人看你的电脑外部。这也是为什么你有数据报和流-TCP和UDP是两个主要的传输层协议,当你建立到传输层的链接时,你需要指定你想要使用的协议。套接字用于使用网络进行通信—在同一系统上的两个进程之间有替代的、更有效和更简单的通信方式。你知道吗
管道更像是专门用于进程间通信的文件描述符。基本上有两种使用管道的方法-命名管道和匿名管道。如果您的“两个python程序”是使用} 来设置它。否则,您需要为您的管道找出一个两个程序都知道的一致的名称和位置,并在一端用^{} 初始化它,然后像在另一端打开一个常规文件一样打开它。这个功能似乎只在Unix上可用,因此如果您在Windows上,您可能需要investigate other solutions。你知道吗
multiprocessing
之类的东西从一个原始程序中分离出来的,那么您可能需要使用匿名管道,您可以使用^{正如@green斗篷guy指出的,您可能希望使用管道,但是如果您打算使用Unix套接字,下面是一个使用StreamRequestHandler的粗略示例:
服务器:
客户:
ThreadingMixIn不是必需的,但它允许您运行两个客户端,并同时从这两个客户端接收消息。将客户机代码复制到“client1.py”和“client2.py”中,并将client2.py中的“client1”更改为“client2”,同时运行这两个命令,以在实践中看到这一点。你知道吗
我不是专家,但听起来虽然管道效率更高,但它们的缺点是只有一个程序链接到另一个程序。如果您有多个客户机和一台服务器,那么Unix套接字(如本文所示)可能是您的最佳选择。你知道吗
相关问题 更多 >
编程相关推荐