8

我有一个由本地“服务器”和 GUI 客户端组成的应用程序。服务器是用 Python 编写的,而 GUI 是可变的,并且是用 Flex 4 编写的。客户端查询本地服务器的信息并相应地显示它。这两个应用程序都应该在同一台计算机上运行,​​并且只会在本地进行通信。目前,客户端和 Python 服务器通过一个基本的套接字进行通信,客户端向套接字写入请求,套接字返回一些数据。

但是,由于我正在编写一个桌面应用程序,我认为使用标准流而不是套接字的系统可能更容易维护和完善。服务器将raw_input()持续侦听,并根据写入 stdin 的任何内容进行输出,在这种情况下,客户端将使用 AIR 的NativeProcess类来读取和写入 stdout 和 stdin,而不是使用套接字。

客户端和服务器是独立的进程,但应该或多或少同时启动。我真的不需要复杂的网络,只需要本地跨语言交流。

每种方法的优缺点是什么?使用套接字我会得到什么或失去什么,而使用标准流进行通信我会得到什么或失去什么?哪个效率更高?哪一个更容易维护?

4

1 回答 1

11

在类 UNIX 平台上,使用 stdin/stdout 是一个套接字,所以没有区别。也就是说,如果您启动一个重定向其 stdout 的进程,通常会使用 socketpair 来完成,因此不需要让您自己的 UNIX 域套接字进行通信。但是,用于处理标准输入/标准输出的 Python 类不会让您访问底层套接字的全部灵活性,因此您必须自己设置它,我认为如果您想做半关闭,例如(Python不能提供跨平台,因为 Windows sys::stdin 不能是套接字,例如,它也不总是在 UNIX 上。)

本地 TCP 连接的好处是它是跨平台的,并且在任何地方都提供可预测的语义。例如,如果您希望能够关闭输出并仍然从输入中读取,那么使用在任何地方都相同的套接字来做这种事情要简单得多。即使没有这个,为简单起见,使用 TCP 套接字始终是解决 Windows 命名管道的古怪混乱的一种合理方法,尽管 Python 可以很好地保护您免受这种影响。

于 2013-03-12T18:31:44.270 回答