ron*_*975 3 python sockets air stdin stdout
我有一个包含本地“服务器”和GUI客户端的应用程序。服务器是用Python编写的,而GUI是可以更改的,并且是用Flex 4编写的。客户端向本地服务器查询信息,并相应地显示信息。这两个应用程序都应在同一台计算机上运行,并且只能在本地进行通信。目前,客户端和Python服务器通过基本套接字进行通信,客户端将请求写入套接字,然后套接字返回一些数据。
但是,由于我正在编写桌面应用程序,因此我认为维护和完善使用标准流而不是套接字的系统可能会更容易。服务器将raw_input()连续侦听,并根据写入stdin的内容进行输出,在这种情况下,客户端将使用AIR的NativeProcess类对stdout和stdin进行读写,而不是使用套接字。
客户端和服务器是独立的进程,但应或多或少同时启动。我真的不需要复杂的网络,只需本地跨语言交流。
每种方法的优缺点是什么?与使用标准流进行通信相比,使用套接字会带来什么收益或损失?哪一个更有效?哪一个更容易维护?
在类似UNIX的平台上,使用stdin / stdout是套接字,因此没有区别。也就是说,如果您使用重定向的stdout启动进程,那么通常将使用套接字对来完成,因此不需要创建自己的UNIX域套接字进行通信。但是,用于处理stdin / stdout的Python类将无法让您访问底层套接字的全部灵活性,因此您必须自己进行设置,例如,我想进行半关闭(Python无法提供该跨平台,因为例如Windows sys :: stdin不能是套接字,也不总是在UNIX上。)
关于本地TCP连接的好处是它是跨平台的,并在各处提供可预测的语义。例如,如果您希望能够关闭输出并仍然从输入中读取内容,则使用套接字在各处都相同的事情来进行这种操作要简单得多。即使没有这种情况,为了简单起见,使用TCP套接字始终是解决Windows命名管道古怪的混乱的合理方法,尽管Python可以使您避免这种情况。