Автор | Сообщение |
SmallPlushBear
8 сообщений |
#3007 2010-09-25 19:09 GMT+3 часа(ов) |
Нашел http://axiom-wiki.newsynthesis.org/SandBoxSocketsInSPAD
***************************** A Simple Lisp Web Server For our current purposes we can define a simple interface based on some code originally provided by Camm Maguire's simple http server in lisp lisp ;; file: http-test.lisp (defun bar (p fn) (let ((s (si::socket p :server fn))) (tagbody l (when (si::listen s) (let ((w (si::accept s))) (foo w))) (sleep 3) (go l)))) (defun foo (s) (let* ((get (read s nil 'eof)) (fn (and (eq get 'get) (string-downcase (read s nil 'eof)))) ) (format t "Got ~S~%~%" fn) (let ((fn (when (probe-file fn) fn) ))) (format s "HTTP/1.1 ~S~%~%" (if fn 200 403)) (format t "HTTP/1.1 ~S~%~%" (if fn 200 403)) (when fn (if (pathname-name (pathname fn)) (with-open-file (q fn) (si::copy-stream q s)) (dolist (l (directory fn)) (format s "~a~%" (namestring l))))) (close s))) + lisp ; compiling file "/var/zope2/var/LatexWiki/304369446719046572-25px001.lisp" (written 20 SEP 2010 04:50:49 PM): ; compilation aborted after 0:00:00.030 >> System error: The value NIL is not of type (OR (VECTOR CHARACTER) (VECTOR NIL) BASE-STRING PATHNAME STREAM). To start the HTTP server on port 8085 we call: >(bar 8085 #'foo) or in Axiom we can use the commands: )lisp (load "http-test.lisp") )lisp (bar 8085 #'foo) then access with the url: http://localhost:8085/directory/or/file *********************************************** Оно вроде работает, но браузер молчит, пытаясь получить страницу. По таймауту не отваливается (я долго ждал). Пример встречается ещё на паре сайтов, с мелкими изменениями. Пожалуйста, подскажите как в браузере получить хоть что-нибудь. |
|
antares0
185 сообщений |
#3009 2010-09-25 20:38 GMT+3 часа(ов) |
Оно повисло ненайдя файла.
Дальше учиться дебажить и трейсить (благо С REPL это не сложно) иначе смысла в запуске таких кусков ни на грошь. |
|
SmallPlushBear
8 сообщений |
#3035 2010-09-30 22:26 GMT+3 часа(ов) |
to: antares0
раздел вроде - "Lisp - с чего начать?". и насколько я понял до поиска файлов не доходит. А посылать в гугл и отладчик - это да, конструктивно... |
|
misha![]()
1275 сообщений |
#3038 2010-10-01 01:49 GMT+3 часа(ов) |
>раздел вроде - "Lisp - с чего начать?".
antares0 прав) А начинать нужно не с этого) >и насколько я понял до поиска файлов не доходит. Это Вы наглаз определили?) |
|
antares0
185 сообщений |
#3044 2010-10-01 23:06 GMT+3 часа(ов) |
Цитата ! В гугл я не посылал, отладчик на ше все. Хотя бы REPL осильте. А что конструктивно? Сделать все за вас?
Вот тут вылет в отладчик, с сообщением, что вместо имени файла получен nil. step и [url=http://www.lispworks.com/documentation/HyperSpec/Body/m_tracec.htm[/url]trace[/url] P. S. Внезапно, а какую точно строку вы в браузер загнали? Надеюсь не http://localhost:8085/directory/or/file |
|
SmallPlushBear
8 сообщений |
#3053 2010-10-03 09:22 GMT+3 часа(ов) |
to Misha:
Это Вы наглаз определили?) Не-а. Старым-старым методом. Напихал ему вывод в консоль. И видно где-чего, и лог заодно. Правда переменные типа "поток" это да. Но их REPL'ом непонятно как рассматривать. to Antares0: P. S. Внезапно, а какую точно строку вы в браузер загнали? Надеюсь не http://localhost:8085/directory/or/file Ну не настолько все печально. А nil по имени файла, да, будет. Я ж не могу синхронизировать запрос от браузера с началом выполнения (bar). И при первом проходе !обязательно имени файла нет. А дальше как нажмешь. Тут похоже все работает, как заявлено автором. Вникал в первоисточник - там обещали "доступ по url", а не "работу с браузером". Axiom ихний, в режиме он-же сервер он-же клиент, по get запросу должен че-то выдавать. А браузеру похоже, урезанный http протокол (а он именно протокол "запрос-ответ"), не входит. Нарыл в итоге HttpDotLisp "http.lisp" - одним маленьким исходником - вроде работает. Частями. Но http вроде реализует - дождался вопроса - отдал ответ - все по взрослому. Соответственно исходник в N раз больше. И 1999 года - в коментах "А с более новыми версиями CLisp местами не работает" ;;; This code has been tested with the 1999-07-22 version of CLisp. ;;; It will probably not run under earlier versions. (This code ;;; depends on several functions that had bugs in earlier versions.) +OPENMCL - тоже поддерживаемая когда-то версия лиспа - он теперь Clozure Common Lisp +MCL - и искать не стал Сижу дружу его с нынешним SBCL'ем. Только он какой-то, более другой. Может что и получиться. А с REPL'ом у меня трудности, да. Но по завету Ильича, продолжаем. Печатного мануала в кириллице, на Common Lisp не сыскал. PCL - это конечно да, переводчикам памятник надо ставить. Но книга слишком популярная. Спасибо. |
|
antares0
185 сообщений |
#3054 2010-10-03 21:32 GMT+3 часа(ов) |
Если для обучения, то есть смысл, наделать своего. Попутно лстая описание http. Так толку будет ИМХО больше.
|
|
SmallPlushBear
8 сообщений |
#3055 2010-10-03 23:11 GMT+3 часа(ов) |
Оно и есть. Хотелось только маленький рабочий пример подержать. Ну я же верю, что оно работает...
|
|
misha![]()
1275 сообщений |
#3056 2010-10-04 00:56 GMT+3 часа(ов) |
>Оно и есть. Хотелось только маленький рабочий пример подержать.
Если Вы не привязаны к CL, то я могу для Вас на писать несколько тестовых серверов на Racket. |
|
misha![]()
1275 сообщений |
#3057 2010-10-04 01:03 GMT+3 часа(ов) |
Если интересно, то можете протестировать мой FTP-сервер(RFTPd).
|
|
antares0
185 сообщений |
#3058 2010-10-04 13:38 GMT+3 часа(ов) |
ClikiГоворит что есть еще s-http-server. У меня он даже заработал.
Но с другой стороны если уж нужен рабочий пример то лучше уж сразу hunchentoot. отредактировал(а) antares0: 2010-10-04 13:43 GMT+3 часа(ов) |
|
misha![]()
1275 сообщений |
#3059 2010-10-04 15:53 GMT+3 часа(ов) |
А hunchentoot кэширует скомпилированные скрипты?
|
|
archimag
48 сообщений |
#3060 2010-10-04 16:16 GMT+3 часа(ов) |
Цитата misha, извини, не выдержал, но ты спросил что-то очень, очень глупое )) |
|
misha![]()
1275 сообщений |
#3061 2010-10-04 16:22 GMT+3 часа(ов) |
>misha, извини, не выдержал, но ты спросил что-то очень, очень глупое
Racket http server именно так и поступает. Я, собственно, не пойму в чем проблема? |
|
archimag
48 сообщений |
#3062 2010-10-04 16:28 GMT+3 часа(ов) |
> Racket http server именно так и поступает.
Верю, только это же Scheme, а это CL. В CL весь код загружается в образ, который работает постоянно. В том числе, в него загружается и код Hunchentoot. И Hunchentoot не работает с какими-либо "скриптами в файлах", он работает с функциями, которые есть в образе. За компиляцию кода отвечает реализация CL (тот же SBCL компилирует в машинный код), но никак не веб-сервер. Понятие "кэширование скомпилированных скриптов" абсолютно бессмысленно. Какая-либо аналогия с Apache+PHP совершенно не уместна. |
|
misha![]()
1275 сообщений |
#3063 2010-10-04 16:51 GMT+3 часа(ов) |
С этого и надо было начинать) В Racket понятие файл(скрипт) эквивалентно понятию модуль, возможность загружать скрипт с помощью load обычно не применяется в реальных программах(считается устаревшей возможностью). Модуль можно скомпилировать как в память, так и в файл. Хотя эта возможность предоставляется, но до сих пор рекомендуется оставить этот процесс на усмотрение реализации.
|
|
archimag
48 сообщений |
#3064 2010-10-04 17:03 GMT+3 часа(ов) |
В CL разделение кода на файлы используется исключительно для удобства и никак не влияет на свойства образа. Код компилируется в машинный и становится частью образа. Вот я и говорю: то, что имеет смысл в Racket, совершенно бессмысленно в CL.
|
|
misha![]()
1275 сообщений |
#3065 2010-10-04 17:46 GMT+3 часа(ов) |
>Вот я и говорю: то, что имеет смысл в Racket, совершенно бессмысленно в CL.
Я думаю, это не совсем так. Когда клиент запрашивает содержимое страницы по адресу http://www.test.com/test.rkt, то Racket http server сначала проверяет существует ли данный модуль "htdocs/test.rkt"(его скомпилированный образ) в кэше, и если есть, то он выполняет его главный метод. Иначе он его компилирует -> кэширует -> выполняет. А как обстоят дела в hunchentoot? |
|
archimag
48 сообщений |
#3067 2010-10-04 18:11 GMT+3 часа(ов) |
Ну, какая-то очень древняя система маршрутизации в Racket, я думал новые разработки так уже никто не делает. Hunchentoot не предоставляет какой-либо особой системы маршрутизации, но никак и не мешает использовать произвольные. Я использую вот это: http://restas.lisper.ru/manual/routes.html
|
|
LinkFly
152 сообщений |
#3068 2010-10-04 18:28 GMT+3 часа(ов) |
Ещё бы, ведь грех не использовать свою собственную разработку ;))
|
|
misha![]()
1275 сообщений |
#3069 2010-10-04 20:03 GMT+3 часа(ов) |
>какая-то очень древняя система маршрутизации в Racket
Ну, так это по умолчанию) Racket HTTP Server - это фреймворк для создания веб-серверов. Для перезаписи URL необходимо добавить собственный обработчик(dispatcher). |
|
kreol
87 сообщений |
#3070 2010-10-05 01:36 GMT+3 часа(ов) |
misha, а на рекете для вебсервера пользоваться (require web-server/servlet
web-server/servlet-env)?? |
|
SmallPlushBear
8 сообщений |
#3072 2010-10-05 09:13 GMT+3 часа(ов) |
to Misha:
>Если Вы не привязаны к CL, то я могу для Вас на писать несколько тестовых серверов на Racket. Привязан к CL под лицензией BSD, "в стандартной поставке", без сторонних библиотек. Прожект мелкобюджетный, работа оплачивается вся, инструменты нет. Видимо будет SBCL. Тестовых на Ракете, не надо, спасибо. FTP сервер видел. Работает. Ракет гуд, но мне мимо кассы. to Antares0: > ClikiГоворит что есть еще s-http-server. У меня он даже заработал. Видел, но уже сломался на >"наделать своего. Попутно лстая описание http". Сижу наделываю. Исходник просмотрел. Для меня те-же проблемы - старый пример с новой реализацией CL. Обычно, в примерах socket'ы берутся из черте чего. Например пакет PORT устарел, видно, морально - для GCL - коммент на open-server-socket ;FIXME много назад. Мелочи работающей на SBCL, CLisp, GCL нынешних редакций так и не нашел. > Но с другой стороны если уж нужен рабочий пример то лучше уж сразу hunchentoot. hunchentoot размер "примера" перерос немного + его чудные зависимости. Пример искал не "покажите мне работающий сервер на лиспе", а "изобразить сервер на экран кода в лиспе". Стандарт CommonLisp, как таковой, не читал, но складывается ощущение что socket'ы и иже с ним в него не входят. Уж сильно разные реализации от лиспа к лиспу. Суть, понятно, одна, имена, вызовы и упаковка - гордо самостийные. Курим SBCL'manual. |
|
antares0
185 сообщений |
#3073 2010-10-05 13:31 GMT+3 часа(ов) |
Цитата GCL практически вышел из употребления. Путем шаманизма и ритуалов вуду вызывается его дух для сборки максимы и axiom. Сеть не в стандарте, да. Но есть например usocket. Если уж надо совсем без библиотек, то выдрать из него нужную последовательность вызова. На один экран это уж скорее к J ![]() |
|
SmallPlushBear
8 сообщений |
#3075 2010-10-05 17:15 GMT+3 часа(ов) |
> На один экран это уж скорее к J - Не понял. что имелось в виду.
Usocket для переносимости софта между (ABCL, Allegro, clisp, CMUCL, LispWorks, OpenMCL, SBCL, ECL and SCL). MIT лицензия гуд, но мне оно просто не к чему. Можно ограничиться SBCL - вроде минимально-достаточно все есть. |
|
antares0
185 сообщений |
#3080 2010-10-05 23:49 GMT+3 часа(ов) |
Цитата Юмор, возможно неудачный. [url]en.wikipedia.org/wiki/J_(programming_language)[/url] - язык с ОЧЕНЬ сжатым синтаксисом. В среде J бытует что-то вроде поговорки, что любая система вне завивисимоти erp это или web-сервер должна умещатьсяв один экран кода. |
|
SmallPlushBear
8 сообщений |
#3092 2010-10-07 02:13 GMT+3 часа(ов) |
)
|
|
SmallPlushBear
8 сообщений |
#7821 2018-01-09 06:01 GMT+3 часа(ов) |
Некропост. Возникла нужда в примере и... я нашел эту ветку
![]() Пример: простого http-ответчика sbcl thread sbcl socket Пример не lisp-style, императив с волшебными числами. Но так понятнее начинающим. SBCL "из коробки", без зависимостей, Linux/Windows, ARM версию (RasbPI) не проверял сохранить в файл, в REPL - (load "имяфайла") в браузере - localhost:8888
|
|