2012-02-27 71 views
2

我有一个工具,它支持通过tcl shell进行交互式查询。我想创建一个Web应用程序,用户可以通过该应用程序向工具发送不同的查询。我已经使用Apache web服务器和cgi脚本完成了一些基本的编程,但我无法想出一种方法来保持shell活着并发送查询。tcl shell通过apache

一些更多的信息:

让我来描述一下。在构建用户可以使用tcl shell查询信息之后,工具构建图形数据结构,类似于获取特定节点的所有子节点。我无法为每个查询构建数据结构,因为构建需要大量时间。我想构建数据结构,并以某种方式保持shell活着。 Apache服务器应将所有查询发送到该shell并将响应返回给用户

回答

1

由于您没有详细说明“交互式”与工具有关的含义,因此该问题似乎并不完整。

它如何支持交互式查询?它是否在一种无限循环中调用gets,并在读取每行时处理每行?如果是这样,你的问题的解决方案很简单:Tcl shell并不关心它的标准输入是否连接到交互式终端。因此,只需在CGI请求处理代码中生成工具,将用户的查询写入该进程的标准输入流,将其刷新为,然后将该进程写入的所有文本读取到其stdout和stderr流。然后将它们发送回浏览器。如何产生流程并通过其标准流与它进行通信很大程度上取决于您的CGI代码。

如果你不明白我的意思,尝试写你的查询到一个文件,然后做comething像

$ tclsh /path/to/your/tool/script.tcl </path/to/the/query.file 

,你应该有一个通常的方式来回应工具。

如果在您的工具中使用其他方式进行交互,那么您可能必须将其分解为“核心”和“前端”部分,以便核心可以读取查询并输出结果,而前端结束部分进行交互。然后以上述方式将该核心连接到CGI处理代码。

+0

在问题 – SAN 2012-02-27 15:34:22

2

您可能想要创建一个守护程序进程,或许使用expect来生成您的交互式程序。守护进程程序可以使用Tcl的socket命令来侦听TCP上的查询。您的CGI程序会创建一个客户端套接字来与daemopn进行对话。

2

我会将图形管理程序嵌入到也运行小型网络服务器的解释器中(例如,tclhttpd,尽管这不是唯一的选择),并让世界其他地方通过RESTful网络访问与图形进行交互。然后,这可以以任何你喜欢的方式集成到Apache后面 - 一个CGI thunk可以工作,或者你可以请求转发,或者你可以编写一些服务器端代码来做到这一点(这里有很多选项!) - 或者你甚至可以只是让客户直接连接。许多选项都可以工作。

+0

中增加了更多信息FWIW,花了我大约一个小时的修补才能在我的一个项目中获得这样的事情。 (我正在使用另一个名为Wibble的嵌入式Web服务器;虽然它不是其他嵌入式Web服务器的完美选择,但它依赖于Tcl 8.6,它仍然是测试版。) – 2012-02-27 22:05:51