Оболочка tcl через apache - PullRequest
       19

Оболочка tcl через apache

2 голосов
/ 27 февраля 2012

У меня есть инструмент, который поддерживает интерактивные запросы через оболочку tcl. Я хочу создать веб-приложение, с помощью которого пользователи могут отправлять различные запросы к инструменту. Я выполнил базовое программирование с использованием веб-сервера Apache и сценариев cgi, но я не могу придумать, как сохранить оболочку и отправлять запросы на нее.

Дополнительная информация:

Позвольте мне описать это подробнее. Инструмент строит структуру данных графа, после сборки пользователи могут запрашивать информацию, используя оболочку tcl, что-то вроде получения всех дочерних узлов определенного узла. Я не могу построить структуру данных с каждым запросом, потому что сборка занимает много времени. Я хочу построить структуру данных и как-то поддерживать оболочку. Сервер Apache должен отправить все запросы в эту оболочку и вернуть ответы обратно пользователю

Ответы [ 3 ]

2 голосов
/ 27 февраля 2012

Возможно, вы захотите создать процесс-демон, возможно, с использованием ожидаемого, который порождает вашу интерактивную программу. Программа-демон может прослушивать запросы через TCP с помощью команды Tcl socket . Ваша CGI-программа создаст клиентский сокет для связи с daemopn.

2 голосов
/ 28 февраля 2012

Я бы встроил программу управления графами в интерпретатор, который также запускает небольшой веб-сервер (например, tclhttpd , хотя это не единственный вариант), и остальной мир взаимодействует с графом через RESTful веб-доступы. Затем его можно интегрировать в Apache любым удобным для вас способом - сработал бы CGI-блок, или вы могли бы выполнить переадресацию запросов, или вы могли бы написать некоторый код на стороне сервера, чтобы сделать это (там много вариантов!) - или вы могли бы даже просто пусть клиенты подключаются напрямую. Многие варианты будут работать.

1 голос
/ 27 февраля 2012

Вопрос кажется неполным, поскольку вы не указали, что именно означает "интерактивный" для вашего инструмента.

Как он поддерживает интерактивные запросы?Он вызывает gets в виде бесконечного цикла и обрабатывает каждую строку во время чтения?Если это так, решение вашей проблемы простое: оболочка Tcl на самом деле не заботится о том, подключен ли ее стандартный вход к интерактивному терминалу или нет.Поэтому просто создайте свой инструмент в коде обработки запросов CGI, запишите запрос пользователя в поток stdin этого процесса, очистите его , а затем прочитайте весь текст, написанный этим процессом, в его потоки stdout и stderr.Затем отправьте их обратно в браузер.Как именно порождать процесс и взаимодействовать с ним через его стандартные потоки, во многом зависит от вашего CGI-кода.

Если вам не пришла в голову идея, попробуйте записать свой запрос в файл, а затем выполните что-то вроде

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

и у вас должен быть инструмент для ответа обычным способом.

Если взаимодействие осуществляется другим способом в вашем инструменте, то вам, вероятно, придется разделить его на «ядро».«и» передние части, так что ядро ​​просто читает запросы и выводит результаты, а передняя часть выполняет взаимодействие.Затем подключите это ядро ​​к своему коду обработки CGI, как описано выше.

...