Подробная информация о APPLICATION-FINDER-FN в sw-http - PullRequest
1 голос
/ 22 февраля 2012

Я собираюсь заняться синхронным веб-программированием на Common Lisp и собираю варианты. Одним из них является sw-http, «HTTP-сервер, разработанный для AJAX / Comet». Документация, кажется, немного не хватает, потому что единственный фрагмент, который я могу найти, говорит вам

Подкласс SERVER и установите для слота APPLICATION-FINDER-FN обратный вызов который генерирует ваш контент.

Кажется, что нет каких-либо заметок или примеров о том, как должен выглядеть этот обратный вызов (некоторые подталкивали меня к тому, что он должен ожидать server и connection в качестве аргументов, но ничего о том, что он должен возвращать или делает).

установить его на что-то наивное, как

(lambda (server conn) (declare (ignore server conn)) "Hello world")

, похоже, ничего не делает, поэтому я предполагаю, что мне нужно либо где-то записать в поток, либо взаимодействовать с server / connection не совсем очевидным образом.

Есть подсказки?

1 Ответ

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

Обработчик получает connection с response, который имеет chunks.

Предположительно, вы добавляете свой контент в chunks (которые octets) из response из connection. К счастью, есть некоторые вспомогательные методы, определенные для облегчения этого.

Вы можете попробовать это (я не могу заставить SW-HTTP компилироваться, поэтому я не могу):

(defun hello (server connection)
  (let*((response (cn-response connection))
        (chunks (rs-chunks response)))
    (queue-push chunks
                (mk-response-status-code 200)
    (queue-push chunks
                (mk-response-message-body "Hello cruel world"))))

(defclass my-server (server)
  ((application-finder-fn :initform #'hello)))

Удачи!

...